@retinalabsllc/zairusjs 4.0.19 → 4.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +72 -1
- package/dist/index.d.ts +72 -1
- package/dist/index.js +213 -32
- package/dist/index.mjs +218 -30
- 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,
|
|
@@ -3574,7 +3577,7 @@ var DriveItemOpener = ({ item, onClose }) => {
|
|
|
3574
3577
|
const i = Math.floor(Math.log(num) / Math.log(k));
|
|
3575
3578
|
return parseFloat((num / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
|
|
3576
3579
|
};
|
|
3577
|
-
return /* @__PURE__ */ import_react69.default.createElement("div", { className: "fixed inset-0 z-200 bg-black/95 flex flex-col animate-in fade-in duration-200" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center justify-between p-4 border-b border-white/10 bg-black" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-10 h-10 bg-white/10 rounded-xl flex items-center justify-center" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "invert grayscale brightness-200" }, /* @__PURE__ */ import_react69.default.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType }))), /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("h3", { className: "text-sm
|
|
3580
|
+
return /* @__PURE__ */ import_react69.default.createElement("div", { className: "fixed inset-0 z-200 bg-black/95 flex flex-col animate-in fade-in duration-200" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center justify-between p-4 border-b border-white/10 bg-black" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-10 h-10 bg-white/10 rounded-xl flex items-center justify-center" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "invert grayscale brightness-200" }, /* @__PURE__ */ import_react69.default.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType }))), /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("h3", { className: "text-sm text-white tracking-wide" }, item.name), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-white/50 mt-0.5" }, item.type, " \u2022 ", formatBytes(item.size), " \u2022 ", new Date(item.updatedAt).toLocaleDateString()))), /* @__PURE__ */ import_react69.default.createElement(
|
|
3578
3581
|
"button",
|
|
3579
3582
|
{
|
|
3580
3583
|
onClick: onClose,
|
|
@@ -4417,8 +4420,48 @@ SECRET_KEY="${secKey}"
|
|
|
4417
4420
|
)))));
|
|
4418
4421
|
};
|
|
4419
4422
|
|
|
4420
|
-
// src/components/
|
|
4423
|
+
// src/components/UniversalAppLibrary.tsx
|
|
4421
4424
|
var import_react82 = __toESM(require("react"));
|
|
4425
|
+
var import_react83 = require("@hugeicons/react");
|
|
4426
|
+
var import_core_free_icons30 = require("@hugeicons/core-free-icons");
|
|
4427
|
+
var AppCard = ({ app }) => {
|
|
4428
|
+
const [isLoading, setIsLoading] = (0, import_react82.useState)(true);
|
|
4429
|
+
return /* @__PURE__ */ import_react82.default.createElement(
|
|
4430
|
+
"button",
|
|
4431
|
+
{
|
|
4432
|
+
onClick: app.onClick,
|
|
4433
|
+
className: "flex flex-col gap-3 group cursor-pointer w-25 shrink-0 text-left outline-none"
|
|
4434
|
+
},
|
|
4435
|
+
/* @__PURE__ */ import_react82.default.createElement("div", { className: "relative w-full aspect-square rounded-2xl bg-white overflow-hidden transition-all duration-300 flex items-center justify-center" }, isLoading && /* @__PURE__ */ import_react82.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ import_react82.default.createElement(import_react83.HugeiconsIcon, { icon: import_core_free_icons30.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react82.default.createElement(
|
|
4436
|
+
"img",
|
|
4437
|
+
{
|
|
4438
|
+
src: app.logoSrc,
|
|
4439
|
+
alt: app.name,
|
|
4440
|
+
loading: "lazy",
|
|
4441
|
+
onLoad: () => setIsLoading(false),
|
|
4442
|
+
className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
|
|
4443
|
+
}
|
|
4444
|
+
)),
|
|
4445
|
+
/* @__PURE__ */ import_react82.default.createElement("div", { className: "flex flex-col min-w-0 px-1" }, /* @__PURE__ */ import_react82.default.createElement("span", { className: "text-[13px] text-black tracking-tight truncate group-hover:text-neutral-600 transition-colors" }, app.name), /* @__PURE__ */ import_react82.default.createElement("span", { className: "text-[10px] text-neutral-500 tracking-wide truncate mt-0.5" }, app.category))
|
|
4446
|
+
);
|
|
4447
|
+
};
|
|
4448
|
+
var UniversalAppLibrary = ({
|
|
4449
|
+
tagline,
|
|
4450
|
+
headline,
|
|
4451
|
+
categories
|
|
4452
|
+
}) => {
|
|
4453
|
+
return /* @__PURE__ */ import_react82.default.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "max-w-6xl w-full" }, (tagline || headline) && /* @__PURE__ */ import_react82.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "relative z-10" }, tagline && /* @__PURE__ */ import_react82.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), headline && /* @__PURE__ */ import_react82.default.createElement("h2", { className: "text-2xl sm:text-3xl tracking-tight text-black leading-[1.1]" }, headline))), /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex flex-col gap-14" }, categories.map((category) => /* @__PURE__ */ import_react82.default.createElement("div", { key: category.id, className: "flex flex-col" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex items-end justify-between mb-5 px-1" }, /* @__PURE__ */ import_react82.default.createElement("h3", { className: "text-lg text-black tracking-tight " }, category.title), category.onSeeMore && /* @__PURE__ */ import_react82.default.createElement(
|
|
4454
|
+
"button",
|
|
4455
|
+
{
|
|
4456
|
+
onClick: category.onSeeMore,
|
|
4457
|
+
className: "text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors outline-none shrink-0 ml-4 pb-0.5"
|
|
4458
|
+
},
|
|
4459
|
+
category.seeMoreLabel || "See More"
|
|
4460
|
+
)), /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex gap-4 sm:gap-6 overflow-x-auto pb-6 pt-2 -mx-4 px-4 sm:mx-0 sm:px-1 [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] scrollbar-none" }, category.apps.map((app) => /* @__PURE__ */ import_react82.default.createElement(AppCard, { key: app.id, app }))), /* @__PURE__ */ import_react82.default.createElement("div", { className: "w-full h-px mt-2 last-of-type:hidden" })))))));
|
|
4461
|
+
};
|
|
4462
|
+
|
|
4463
|
+
// src/components/MedicalFeatureStatsBlock.tsx
|
|
4464
|
+
var import_react84 = __toESM(require("react"));
|
|
4422
4465
|
var import_image11 = __toESM(require("next/image"));
|
|
4423
4466
|
var MedicalFeatureStatsBlock = ({
|
|
4424
4467
|
bottomHeadline,
|
|
@@ -4427,9 +4470,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4427
4470
|
trustText,
|
|
4428
4471
|
stats
|
|
4429
4472
|
}) => {
|
|
4430
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
4431
|
-
const titleRef = (0,
|
|
4432
|
-
(0,
|
|
4473
|
+
const [isAnimating, setIsAnimating] = (0, import_react84.useState)(false);
|
|
4474
|
+
const titleRef = (0, import_react84.useRef)(null);
|
|
4475
|
+
(0, import_react84.useEffect)(() => {
|
|
4433
4476
|
const observer = new IntersectionObserver(
|
|
4434
4477
|
([entry]) => {
|
|
4435
4478
|
if (entry.isIntersecting) {
|
|
@@ -4447,7 +4490,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4447
4490
|
}
|
|
4448
4491
|
return () => observer.disconnect();
|
|
4449
4492
|
}, []);
|
|
4450
|
-
return /* @__PURE__ */
|
|
4493
|
+
return /* @__PURE__ */ import_react84.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react84.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react84.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ import_react84.default.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ import_react84.default.createElement(
|
|
4451
4494
|
"h2",
|
|
4452
4495
|
{
|
|
4453
4496
|
ref: titleRef,
|
|
@@ -4455,7 +4498,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4455
4498
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
4456
4499
|
},
|
|
4457
4500
|
bottomHeadline
|
|
4458
|
-
), /* @__PURE__ */
|
|
4501
|
+
), /* @__PURE__ */ import_react84.default.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ import_react84.default.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ import_react84.default.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ import_react84.default.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ import_react84.default.createElement(
|
|
4459
4502
|
import_image11.default,
|
|
4460
4503
|
{
|
|
4461
4504
|
src,
|
|
@@ -4464,17 +4507,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4464
4507
|
sizes: "48px",
|
|
4465
4508
|
className: "object-cover"
|
|
4466
4509
|
}
|
|
4467
|
-
)))), /* @__PURE__ */
|
|
4510
|
+
)))), /* @__PURE__ */ import_react84.default.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ import_react84.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ import_react84.default.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ import_react84.default.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ import_react84.default.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ import_react84.default.createElement("div", { className: "text-6xl gradient-text md:text-[80px] font-light tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
4468
4511
|
};
|
|
4469
4512
|
|
|
4470
4513
|
// src/components/ConsultantShowcase.tsx
|
|
4471
|
-
var
|
|
4514
|
+
var import_react85 = __toESM(require("react"));
|
|
4472
4515
|
var import_image12 = __toESM(require("next/image"));
|
|
4473
|
-
var
|
|
4474
|
-
var
|
|
4516
|
+
var import_react86 = require("@hugeicons/react");
|
|
4517
|
+
var import_core_free_icons31 = require("@hugeicons/core-free-icons");
|
|
4475
4518
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
4476
|
-
const [isLoading, setIsLoading] = (0,
|
|
4477
|
-
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(
|
|
4478
4521
|
import_image12.default,
|
|
4479
4522
|
{
|
|
4480
4523
|
src,
|
|
@@ -4493,9 +4536,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
4493
4536
|
var ConsultantShowcase = ({
|
|
4494
4537
|
profiles
|
|
4495
4538
|
}) => {
|
|
4496
|
-
const [currentIndex, setCurrentIndex] = (0,
|
|
4497
|
-
const [touchStart, setTouchStart] = (0,
|
|
4498
|
-
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);
|
|
4499
4542
|
const nextSlide = () => {
|
|
4500
4543
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
4501
4544
|
};
|
|
@@ -4520,7 +4563,7 @@ var ConsultantShowcase = ({
|
|
|
4520
4563
|
}
|
|
4521
4564
|
};
|
|
4522
4565
|
if (!profiles || profiles.length === 0) return null;
|
|
4523
|
-
return /* @__PURE__ */
|
|
4566
|
+
return /* @__PURE__ */ import_react85.default.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react85.default.createElement(
|
|
4524
4567
|
"div",
|
|
4525
4568
|
{
|
|
4526
4569
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -4530,13 +4573,13 @@ var ConsultantShowcase = ({
|
|
|
4530
4573
|
},
|
|
4531
4574
|
profiles.map((profile, idx) => {
|
|
4532
4575
|
const isActive = idx === currentIndex;
|
|
4533
|
-
return /* @__PURE__ */
|
|
4576
|
+
return /* @__PURE__ */ import_react85.default.createElement(
|
|
4534
4577
|
"div",
|
|
4535
4578
|
{
|
|
4536
4579
|
key: profile.id,
|
|
4537
4580
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
4538
4581
|
},
|
|
4539
|
-
/* @__PURE__ */
|
|
4582
|
+
/* @__PURE__ */ import_react85.default.createElement(
|
|
4540
4583
|
ImageWithLoader,
|
|
4541
4584
|
{
|
|
4542
4585
|
src: profile.imageSrc,
|
|
@@ -4544,14 +4587,14 @@ var ConsultantShowcase = ({
|
|
|
4544
4587
|
priority: idx === 0
|
|
4545
4588
|
}
|
|
4546
4589
|
),
|
|
4547
|
-
/* @__PURE__ */
|
|
4548
|
-
/* @__PURE__ */
|
|
4549
|
-
/* @__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)))
|
|
4550
4593
|
);
|
|
4551
4594
|
}),
|
|
4552
|
-
/* @__PURE__ */
|
|
4553
|
-
/* @__PURE__ */
|
|
4554
|
-
/* @__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(
|
|
4555
4598
|
"button",
|
|
4556
4599
|
{
|
|
4557
4600
|
key: idx,
|
|
@@ -4564,13 +4607,13 @@ var ConsultantShowcase = ({
|
|
|
4564
4607
|
};
|
|
4565
4608
|
|
|
4566
4609
|
// src/components/ContentGridBlock.tsx
|
|
4567
|
-
var
|
|
4610
|
+
var import_react87 = __toESM(require("react"));
|
|
4568
4611
|
var import_image13 = __toESM(require("next/image"));
|
|
4569
|
-
var
|
|
4570
|
-
var
|
|
4612
|
+
var import_react88 = require("@hugeicons/react");
|
|
4613
|
+
var import_core_free_icons32 = require("@hugeicons/core-free-icons");
|
|
4571
4614
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
4572
|
-
const [isLoading, setIsLoading] = (0,
|
|
4573
|
-
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(
|
|
4574
4617
|
import_image13.default,
|
|
4575
4618
|
{
|
|
4576
4619
|
src,
|
|
@@ -4592,14 +4635,149 @@ var ContentGridBlock = ({
|
|
|
4592
4635
|
middleBottomCard,
|
|
4593
4636
|
rightCards
|
|
4594
4637
|
}) => {
|
|
4595
|
-
return /* @__PURE__ */
|
|
4638
|
+
return /* @__PURE__ */ import_react87.default.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react87.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react87.default.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react87.default.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react87.default.createElement("div", null, /* @__PURE__ */ import_react87.default.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ import_react87.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react87.default.createElement(import_image13.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react87.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react87.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ import_react87.default.createElement(import_image13.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react87.default.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-100 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ import_react87.default.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react87.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react87.default.createElement("div", null, /* @__PURE__ */ import_react87.default.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react87.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react87.default.createElement(import_image13.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react87.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ import_react87.default.createElement("div", { key: idx, className: "relative w-full h-80 rounded-3xl overflow-hidden group" }, /* @__PURE__ */ import_react87.default.createElement(
|
|
4596
4639
|
ImageWithLoader2,
|
|
4597
4640
|
{
|
|
4598
4641
|
src: card.bgImageSrc,
|
|
4599
4642
|
alt: card.title,
|
|
4600
4643
|
className: "absolute inset-0 w-full h-full"
|
|
4601
4644
|
}
|
|
4602
|
-
), /* @__PURE__ */
|
|
4645
|
+
), /* @__PURE__ */ import_react87.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-20 pointer-events-none" }), /* @__PURE__ */ import_react87.default.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ import_react87.default.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ import_react87.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react87.default.createElement("h4", { className: "text-[15px] tracking-wide" }, card.title), /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
4646
|
+
};
|
|
4647
|
+
|
|
4648
|
+
// src/components/UniversalAppDetails.tsx
|
|
4649
|
+
var import_react89 = __toESM(require("react"));
|
|
4650
|
+
var import_react90 = require("@hugeicons/react");
|
|
4651
|
+
var import_core_free_icons33 = require("@hugeicons/core-free-icons");
|
|
4652
|
+
var ScreenshotCard = ({ src, alt, onClick }) => {
|
|
4653
|
+
const [isLoading, setIsLoading] = (0, import_react89.useState)(true);
|
|
4654
|
+
return /* @__PURE__ */ import_react89.default.createElement(
|
|
4655
|
+
"button",
|
|
4656
|
+
{
|
|
4657
|
+
onClick,
|
|
4658
|
+
className: "relative w-28 sm:w-32 aspect-9/19 shrink-0 rounded-2xl overflow-hidden bg-neutral-100 border border-neutral-200/50 outline-none hover:opacity-90 transition-opacity"
|
|
4659
|
+
},
|
|
4660
|
+
isLoading && /* @__PURE__ */ import_react89.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })),
|
|
4661
|
+
/* @__PURE__ */ import_react89.default.createElement(
|
|
4662
|
+
"img",
|
|
4663
|
+
{
|
|
4664
|
+
src,
|
|
4665
|
+
alt,
|
|
4666
|
+
loading: "lazy",
|
|
4667
|
+
onLoad: () => setIsLoading(false),
|
|
4668
|
+
className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
|
|
4669
|
+
}
|
|
4670
|
+
)
|
|
4671
|
+
);
|
|
4672
|
+
};
|
|
4673
|
+
var LightboxImage = ({ src }) => {
|
|
4674
|
+
const [isLoading, setIsLoading] = (0, import_react89.useState)(true);
|
|
4675
|
+
return /* @__PURE__ */ import_react89.default.createElement("div", { className: "relative w-full h-full flex items-center justify-center p-4" }, isLoading && /* @__PURE__ */ import_react89.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Loading03Icon, size: 32, className: "animate-spin text-white" })), /* @__PURE__ */ import_react89.default.createElement(
|
|
4676
|
+
"img",
|
|
4677
|
+
{
|
|
4678
|
+
src,
|
|
4679
|
+
alt: "Fullscreen Screenshot",
|
|
4680
|
+
onLoad: () => setIsLoading(false),
|
|
4681
|
+
className: `max-w-full max-h-full object-contain transition-all duration-500 z-20 ${isLoading ? "opacity-0 blur-md" : "opacity-100 blur-0"}`
|
|
4682
|
+
}
|
|
4683
|
+
));
|
|
4684
|
+
};
|
|
4685
|
+
var UniversalAppDetails = ({ app, onBack }) => {
|
|
4686
|
+
const [isLogoLoading, setIsLogoLoading] = (0, import_react89.useState)(true);
|
|
4687
|
+
const [isDescExpanded, setIsDescExpanded] = (0, import_react89.useState)(false);
|
|
4688
|
+
const [lightboxIndex, setLightboxIndex] = (0, import_react89.useState)(null);
|
|
4689
|
+
const MAX_DESC_LENGTH = 150;
|
|
4690
|
+
const isDescLong = app.description.length > MAX_DESC_LENGTH;
|
|
4691
|
+
const displayDesc = isDescExpanded || !isDescLong ? app.description : `${app.description.substring(0, MAX_DESC_LENGTH)}...`;
|
|
4692
|
+
const handlePrev = () => {
|
|
4693
|
+
if (lightboxIndex !== null) {
|
|
4694
|
+
setLightboxIndex(lightboxIndex === 0 ? app.screenshots.length - 1 : lightboxIndex - 1);
|
|
4695
|
+
}
|
|
4696
|
+
};
|
|
4697
|
+
const handleNext = () => {
|
|
4698
|
+
if (lightboxIndex !== null) {
|
|
4699
|
+
setLightboxIndex(lightboxIndex === app.screenshots.length - 1 ? 0 : lightboxIndex + 1);
|
|
4700
|
+
}
|
|
4701
|
+
};
|
|
4702
|
+
return /* @__PURE__ */ import_react89.default.createElement("div", { className: "w-full max-w-3xl mx-auto pt-10 pb-20 px-6 min-h-screen flex flex-col items-center" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col sm:flex-row items-start gap-4 w-full mb-10 text-left" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "relative w-20 h-20 sm:w-20 sm:h-20 md:w-24 md:h-24 lg:w-28 lg:h-28 shrink-0 rounded-2xl overflow-hidden flex items-center justify-center border border-neutral-100/50 bg-neutral-50" }, isLogoLoading && /* @__PURE__ */ import_react89.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100 animate-pulse" }), /* @__PURE__ */ import_react89.default.createElement(
|
|
4703
|
+
"img",
|
|
4704
|
+
{
|
|
4705
|
+
src: app.logoSrc,
|
|
4706
|
+
alt: `${app.name} Logo`,
|
|
4707
|
+
onLoad: () => setIsLogoLoading(false),
|
|
4708
|
+
className: `w-full h-full object-cover transition-opacity duration-300 z-20 ${isLogoLoading ? "opacity-0" : "opacity-100"}`
|
|
4709
|
+
}
|
|
4710
|
+
)), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col justify-center pt-1 min-w-0" }, /* @__PURE__ */ import_react89.default.createElement("h1", { className: "text-xl text-black leading-tight mb-1 font-medium" }, /* @__PURE__ */ import_react89.default.createElement("span", { className: "block truncate" }, app.name)), /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-xs mt-1 text-neutral-400 truncate max-w-full" }, app.tagline), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-wrap items-center mt-4 gap-8 w-full" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex items-center gap-1.5 h-6 text-neutral-800" }, app.platforms.android && /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.AndroidIcon, size: 18 }), app.platforms.ios && /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.AppleIcon, size: 18 })), /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Platforms")), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-sm font-medium h-6 flex items-center text-neutral-800 truncate" }, app.stats.type), /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Type")), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-sm font-medium h-6 flex items-center text-neutral-800 truncate" }, app.stats.size), /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Size"))))), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 items-center w-full mx-auto mb-12" }, app.ctaText && app.ctaHref && /* @__PURE__ */ import_react89.default.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ import_react89.default.createElement(ThreeDButton, { href: app.ctaHref }, /* @__PURE__ */ import_react89.default.createElement("span", { className: "flex items-center justify-center gap-2" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Download01Icon, size: 16 }), app.ctaText))), app.secondaryCtaText && app.secondaryCtaHref && /* @__PURE__ */ import_react89.default.createElement(
|
|
4711
|
+
"a",
|
|
4712
|
+
{
|
|
4713
|
+
href: app.secondaryCtaHref,
|
|
4714
|
+
className: "w-full sm:w-60 inline-flex items-center justify-center gap-2 text-[11px] tracking-widest rounded-full px-8 py-2.5 border border-neutral-100 text-center text-black hover:bg-neutral-50 outline-none transition-colors"
|
|
4715
|
+
},
|
|
4716
|
+
/* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Bookmark02Icon, size: 16 }),
|
|
4717
|
+
app.secondaryCtaText
|
|
4718
|
+
)), /* @__PURE__ */ import_react89.default.createElement("div", { className: "w-full mb-12" }, /* @__PURE__ */ import_react89.default.createElement("h2", { className: "text-xl text-black font-medium mb-4" }, "About"), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex gap-3 overflow-x-auto pb-4 scrollbar-hide -mx-6 px-6" }, app.screenshots.map((src, idx) => /* @__PURE__ */ import_react89.default.createElement(
|
|
4719
|
+
ScreenshotCard,
|
|
4720
|
+
{
|
|
4721
|
+
key: idx,
|
|
4722
|
+
src,
|
|
4723
|
+
alt: `${app.name} Screenshot ${idx + 1}`,
|
|
4724
|
+
onClick: () => setLightboxIndex(idx)
|
|
4725
|
+
}
|
|
4726
|
+
))), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex items-end text-neutral-500 text-sm leading-relaxed mt-2" }, /* @__PURE__ */ import_react89.default.createElement("p", { className: "flex-1 whitespace-pre-wrap" }, displayDesc), isDescLong && /* @__PURE__ */ import_react89.default.createElement(
|
|
4727
|
+
"button",
|
|
4728
|
+
{
|
|
4729
|
+
onClick: () => setIsDescExpanded(!isDescExpanded),
|
|
4730
|
+
className: "ml-2 mb-0.5 text-neutral-400 hover:text-black transition-colors outline-none shrink-0"
|
|
4731
|
+
},
|
|
4732
|
+
/* @__PURE__ */ import_react89.default.createElement(
|
|
4733
|
+
import_react90.HugeiconsIcon,
|
|
4734
|
+
{
|
|
4735
|
+
icon: import_core_free_icons33.ArrowDown01Icon,
|
|
4736
|
+
size: 18,
|
|
4737
|
+
className: `transform transition-transform ${isDescExpanded ? "rotate-180" : ""}`
|
|
4738
|
+
}
|
|
4739
|
+
)
|
|
4740
|
+
))), lightboxIndex !== null && /* @__PURE__ */ import_react89.default.createElement("div", { className: "fixed inset-0 z-50 bg-black/30 flex flex-col" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "w-full p-4 sm:p-6 flex justify-end" }, /* @__PURE__ */ import_react89.default.createElement(
|
|
4741
|
+
"button",
|
|
4742
|
+
{
|
|
4743
|
+
onClick: () => setLightboxIndex(null),
|
|
4744
|
+
className: "p-3 text-white bg-white/30 rounded-full transition-colors outline-none"
|
|
4745
|
+
},
|
|
4746
|
+
/* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Cancel01Icon, size: 24 })
|
|
4747
|
+
)), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex-1 flex items-center justify-between px-4 sm:px-10 pb-10" }, /* @__PURE__ */ import_react89.default.createElement("button", { onClick: handlePrev, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.ArrowLeft01Icon, size: 24 })), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex-1 h-full max-h-[80vh]" }, /* @__PURE__ */ import_react89.default.createElement(LightboxImage, { src: app.screenshots[lightboxIndex] })), /* @__PURE__ */ import_react89.default.createElement("button", { onClick: handleNext, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.ArrowRight01Icon, size: 24 }))), /* @__PURE__ */ import_react89.default.createElement("div", { className: "sm:hidden flex justify-between px-8 pb-12 w-full" }, /* @__PURE__ */ import_react89.default.createElement("button", { onClick: handlePrev, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.ArrowLeft01Icon, size: 24 })), /* @__PURE__ */ import_react89.default.createElement("button", { onClick: handleNext, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.ArrowRight01Icon, size: 24 })))));
|
|
4748
|
+
};
|
|
4749
|
+
|
|
4750
|
+
// src/components/UniversalAppCategoryGrid.tsx
|
|
4751
|
+
var import_react91 = __toESM(require("react"));
|
|
4752
|
+
var import_react92 = require("@hugeicons/react");
|
|
4753
|
+
var import_core_free_icons34 = require("@hugeicons/core-free-icons");
|
|
4754
|
+
var AppGridCard = ({ app }) => {
|
|
4755
|
+
const [isLoading, setIsLoading] = (0, import_react91.useState)(true);
|
|
4756
|
+
return /* @__PURE__ */ import_react91.default.createElement(
|
|
4757
|
+
"button",
|
|
4758
|
+
{
|
|
4759
|
+
onClick: app.onClick,
|
|
4760
|
+
className: "flex flex-col gap-3 group cursor-pointer w-25 text-left outline-none"
|
|
4761
|
+
},
|
|
4762
|
+
/* @__PURE__ */ import_react91.default.createElement("div", { className: "relative w-full aspect-square rounded-2xl bg-white overflow-hidden transition-all duration-300 flex items-center justify-center" }, isLoading && /* @__PURE__ */ import_react91.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ import_react91.default.createElement(import_react92.HugeiconsIcon, { icon: import_core_free_icons34.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react91.default.createElement(
|
|
4763
|
+
"img",
|
|
4764
|
+
{
|
|
4765
|
+
src: app.logoSrc,
|
|
4766
|
+
alt: app.name,
|
|
4767
|
+
loading: "lazy",
|
|
4768
|
+
onLoad: () => setIsLoading(false),
|
|
4769
|
+
className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
|
|
4770
|
+
}
|
|
4771
|
+
)),
|
|
4772
|
+
/* @__PURE__ */ import_react91.default.createElement("div", { className: "flex flex-col min-w-0 px-1" }, /* @__PURE__ */ import_react91.default.createElement("span", { className: "text-[13px] text-black tracking-tight truncate group-hover:text-neutral-600 transition-colors" }, app.name), /* @__PURE__ */ import_react91.default.createElement("span", { className: "text-[10px] text-neutral-500 tracking-wide truncate mt-0.5" }, app.category))
|
|
4773
|
+
);
|
|
4774
|
+
};
|
|
4775
|
+
var UniversalAppCategoryGrid = ({
|
|
4776
|
+
tagline,
|
|
4777
|
+
categoryTitle,
|
|
4778
|
+
apps
|
|
4779
|
+
}) => {
|
|
4780
|
+
return /* @__PURE__ */ import_react91.default.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ import_react91.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react91.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react91.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react91.default.createElement("div", { className: "relative z-10" }, tagline && /* @__PURE__ */ import_react91.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), categoryTitle && /* @__PURE__ */ import_react91.default.createElement("h2", { className: "text-2xl sm:text-3xl tracking-tight text-black leading-[1.1]" }, categoryTitle))), /* @__PURE__ */ import_react91.default.createElement("div", { className: "grid grid-cols-3 sm:grid-cols-4 md:grid-cols-6 lg:grid-cols-8 gap-4 sm:gap-6 px-1" }, apps.map((app) => /* @__PURE__ */ import_react91.default.createElement(AppGridCard, { key: app.id, app }))))));
|
|
4603
4781
|
};
|
|
4604
4782
|
// Annotate the CommonJS export names for ESM import in node:
|
|
4605
4783
|
0 && (module.exports = {
|
|
@@ -4638,6 +4816,9 @@ var ContentGridBlock = ({
|
|
|
4638
4816
|
ThreeDActionButton,
|
|
4639
4817
|
ThreeDButton,
|
|
4640
4818
|
UniversalAgentConsole,
|
|
4819
|
+
UniversalAppCategoryGrid,
|
|
4820
|
+
UniversalAppDetails,
|
|
4821
|
+
UniversalAppLibrary,
|
|
4641
4822
|
UniversalBillingPage,
|
|
4642
4823
|
UniversalCheckoutView,
|
|
4643
4824
|
UniversalDashboardPage,
|
package/dist/index.mjs
CHANGED
|
@@ -3566,7 +3566,7 @@ var DriveItemOpener = ({ item, onClose }) => {
|
|
|
3566
3566
|
const i = Math.floor(Math.log(num) / Math.log(k));
|
|
3567
3567
|
return parseFloat((num / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
|
|
3568
3568
|
};
|
|
3569
|
-
return /* @__PURE__ */ React42.createElement("div", { className: "fixed inset-0 z-200 bg-black/95 flex flex-col animate-in fade-in duration-200" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center justify-between p-4 border-b border-white/10 bg-black" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React42.createElement("div", { className: "w-10 h-10 bg-white/10 rounded-xl flex items-center justify-center" }, /* @__PURE__ */ React42.createElement("div", { className: "invert grayscale brightness-200" }, /* @__PURE__ */ React42.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType }))), /* @__PURE__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("h3", { className: "text-sm
|
|
3569
|
+
return /* @__PURE__ */ React42.createElement("div", { className: "fixed inset-0 z-200 bg-black/95 flex flex-col animate-in fade-in duration-200" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center justify-between p-4 border-b border-white/10 bg-black" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React42.createElement("div", { className: "w-10 h-10 bg-white/10 rounded-xl flex items-center justify-center" }, /* @__PURE__ */ React42.createElement("div", { className: "invert grayscale brightness-200" }, /* @__PURE__ */ React42.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType }))), /* @__PURE__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("h3", { className: "text-sm text-white tracking-wide" }, item.name), /* @__PURE__ */ React42.createElement("p", { className: "text-xs text-white/50 mt-0.5" }, item.type, " \u2022 ", formatBytes(item.size), " \u2022 ", new Date(item.updatedAt).toLocaleDateString()))), /* @__PURE__ */ React42.createElement(
|
|
3570
3570
|
"button",
|
|
3571
3571
|
{
|
|
3572
3572
|
onClick: onClose,
|
|
@@ -4409,8 +4409,48 @@ SECRET_KEY="${secKey}"
|
|
|
4409
4409
|
)))));
|
|
4410
4410
|
};
|
|
4411
4411
|
|
|
4412
|
+
// src/components/UniversalAppLibrary.tsx
|
|
4413
|
+
import React49, { useState as useState29 } from "react";
|
|
4414
|
+
import { HugeiconsIcon as HugeiconsIcon34 } from "@hugeicons/react";
|
|
4415
|
+
import { Loading03Icon as Loading03Icon17 } from "@hugeicons/core-free-icons";
|
|
4416
|
+
var AppCard = ({ app }) => {
|
|
4417
|
+
const [isLoading, setIsLoading] = useState29(true);
|
|
4418
|
+
return /* @__PURE__ */ React49.createElement(
|
|
4419
|
+
"button",
|
|
4420
|
+
{
|
|
4421
|
+
onClick: app.onClick,
|
|
4422
|
+
className: "flex flex-col gap-3 group cursor-pointer w-25 shrink-0 text-left outline-none"
|
|
4423
|
+
},
|
|
4424
|
+
/* @__PURE__ */ React49.createElement("div", { className: "relative w-full aspect-square rounded-2xl bg-white overflow-hidden transition-all duration-300 flex items-center justify-center" }, isLoading && /* @__PURE__ */ React49.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ React49.createElement(HugeiconsIcon34, { icon: Loading03Icon17, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React49.createElement(
|
|
4425
|
+
"img",
|
|
4426
|
+
{
|
|
4427
|
+
src: app.logoSrc,
|
|
4428
|
+
alt: app.name,
|
|
4429
|
+
loading: "lazy",
|
|
4430
|
+
onLoad: () => setIsLoading(false),
|
|
4431
|
+
className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
|
|
4432
|
+
}
|
|
4433
|
+
)),
|
|
4434
|
+
/* @__PURE__ */ React49.createElement("div", { className: "flex flex-col min-w-0 px-1" }, /* @__PURE__ */ React49.createElement("span", { className: "text-[13px] text-black tracking-tight truncate group-hover:text-neutral-600 transition-colors" }, app.name), /* @__PURE__ */ React49.createElement("span", { className: "text-[10px] text-neutral-500 tracking-wide truncate mt-0.5" }, app.category))
|
|
4435
|
+
);
|
|
4436
|
+
};
|
|
4437
|
+
var UniversalAppLibrary = ({
|
|
4438
|
+
tagline,
|
|
4439
|
+
headline,
|
|
4440
|
+
categories
|
|
4441
|
+
}) => {
|
|
4442
|
+
return /* @__PURE__ */ React49.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ React49.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ React49.createElement("div", { className: "max-w-6xl w-full" }, (tagline || headline) && /* @__PURE__ */ React49.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ React49.createElement("div", { className: "relative z-10" }, tagline && /* @__PURE__ */ React49.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), headline && /* @__PURE__ */ React49.createElement("h2", { className: "text-2xl sm:text-3xl tracking-tight text-black leading-[1.1]" }, headline))), /* @__PURE__ */ React49.createElement("div", { className: "flex flex-col gap-14" }, categories.map((category) => /* @__PURE__ */ React49.createElement("div", { key: category.id, className: "flex flex-col" }, /* @__PURE__ */ React49.createElement("div", { className: "flex items-end justify-between mb-5 px-1" }, /* @__PURE__ */ React49.createElement("h3", { className: "text-lg text-black tracking-tight " }, category.title), category.onSeeMore && /* @__PURE__ */ React49.createElement(
|
|
4443
|
+
"button",
|
|
4444
|
+
{
|
|
4445
|
+
onClick: category.onSeeMore,
|
|
4446
|
+
className: "text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors outline-none shrink-0 ml-4 pb-0.5"
|
|
4447
|
+
},
|
|
4448
|
+
category.seeMoreLabel || "See More"
|
|
4449
|
+
)), /* @__PURE__ */ React49.createElement("div", { className: "flex gap-4 sm:gap-6 overflow-x-auto pb-6 pt-2 -mx-4 px-4 sm:mx-0 sm:px-1 [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] scrollbar-none" }, category.apps.map((app) => /* @__PURE__ */ React49.createElement(AppCard, { key: app.id, app }))), /* @__PURE__ */ React49.createElement("div", { className: "w-full h-px mt-2 last-of-type:hidden" })))))));
|
|
4450
|
+
};
|
|
4451
|
+
|
|
4412
4452
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
4413
|
-
import
|
|
4453
|
+
import React50, { useState as useState30, useEffect as useEffect20, useRef as useRef12 } from "react";
|
|
4414
4454
|
import Image11 from "next/image";
|
|
4415
4455
|
var MedicalFeatureStatsBlock = ({
|
|
4416
4456
|
bottomHeadline,
|
|
@@ -4419,7 +4459,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4419
4459
|
trustText,
|
|
4420
4460
|
stats
|
|
4421
4461
|
}) => {
|
|
4422
|
-
const [isAnimating, setIsAnimating] =
|
|
4462
|
+
const [isAnimating, setIsAnimating] = useState30(false);
|
|
4423
4463
|
const titleRef = useRef12(null);
|
|
4424
4464
|
useEffect20(() => {
|
|
4425
4465
|
const observer = new IntersectionObserver(
|
|
@@ -4439,7 +4479,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4439
4479
|
}
|
|
4440
4480
|
return () => observer.disconnect();
|
|
4441
4481
|
}, []);
|
|
4442
|
-
return /* @__PURE__ */
|
|
4482
|
+
return /* @__PURE__ */ React50.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ React50.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React50.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ React50.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ React50.createElement(
|
|
4443
4483
|
"h2",
|
|
4444
4484
|
{
|
|
4445
4485
|
ref: titleRef,
|
|
@@ -4447,7 +4487,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4447
4487
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
4448
4488
|
},
|
|
4449
4489
|
bottomHeadline
|
|
4450
|
-
), /* @__PURE__ */
|
|
4490
|
+
), /* @__PURE__ */ React50.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ React50.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ React50.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ React50.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ React50.createElement(
|
|
4451
4491
|
Image11,
|
|
4452
4492
|
{
|
|
4453
4493
|
src,
|
|
@@ -4456,17 +4496,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4456
4496
|
sizes: "48px",
|
|
4457
4497
|
className: "object-cover"
|
|
4458
4498
|
}
|
|
4459
|
-
)))), /* @__PURE__ */
|
|
4499
|
+
)))), /* @__PURE__ */ React50.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ React50.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ React50.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ React50.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ React50.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ React50.createElement("div", { className: "text-6xl gradient-text md:text-[80px] font-light tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
4460
4500
|
};
|
|
4461
4501
|
|
|
4462
4502
|
// src/components/ConsultantShowcase.tsx
|
|
4463
|
-
import
|
|
4503
|
+
import React51, { useState as useState31 } from "react";
|
|
4464
4504
|
import Image12 from "next/image";
|
|
4465
|
-
import { HugeiconsIcon as
|
|
4466
|
-
import { Loading03Icon as
|
|
4505
|
+
import { HugeiconsIcon as HugeiconsIcon35 } from "@hugeicons/react";
|
|
4506
|
+
import { Loading03Icon as Loading03Icon18 } from "@hugeicons/core-free-icons";
|
|
4467
4507
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
4468
|
-
const [isLoading, setIsLoading] =
|
|
4469
|
-
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(
|
|
4470
4510
|
Image12,
|
|
4471
4511
|
{
|
|
4472
4512
|
src,
|
|
@@ -4485,9 +4525,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
4485
4525
|
var ConsultantShowcase = ({
|
|
4486
4526
|
profiles
|
|
4487
4527
|
}) => {
|
|
4488
|
-
const [currentIndex, setCurrentIndex] =
|
|
4489
|
-
const [touchStart, setTouchStart] =
|
|
4490
|
-
const [touchEnd, setTouchEnd] =
|
|
4528
|
+
const [currentIndex, setCurrentIndex] = useState31(0);
|
|
4529
|
+
const [touchStart, setTouchStart] = useState31(null);
|
|
4530
|
+
const [touchEnd, setTouchEnd] = useState31(null);
|
|
4491
4531
|
const nextSlide = () => {
|
|
4492
4532
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
4493
4533
|
};
|
|
@@ -4512,7 +4552,7 @@ var ConsultantShowcase = ({
|
|
|
4512
4552
|
}
|
|
4513
4553
|
};
|
|
4514
4554
|
if (!profiles || profiles.length === 0) return null;
|
|
4515
|
-
return /* @__PURE__ */
|
|
4555
|
+
return /* @__PURE__ */ React51.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ React51.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React51.createElement(
|
|
4516
4556
|
"div",
|
|
4517
4557
|
{
|
|
4518
4558
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -4522,13 +4562,13 @@ var ConsultantShowcase = ({
|
|
|
4522
4562
|
},
|
|
4523
4563
|
profiles.map((profile, idx) => {
|
|
4524
4564
|
const isActive = idx === currentIndex;
|
|
4525
|
-
return /* @__PURE__ */
|
|
4565
|
+
return /* @__PURE__ */ React51.createElement(
|
|
4526
4566
|
"div",
|
|
4527
4567
|
{
|
|
4528
4568
|
key: profile.id,
|
|
4529
4569
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
4530
4570
|
},
|
|
4531
|
-
/* @__PURE__ */
|
|
4571
|
+
/* @__PURE__ */ React51.createElement(
|
|
4532
4572
|
ImageWithLoader,
|
|
4533
4573
|
{
|
|
4534
4574
|
src: profile.imageSrc,
|
|
@@ -4536,14 +4576,14 @@ var ConsultantShowcase = ({
|
|
|
4536
4576
|
priority: idx === 0
|
|
4537
4577
|
}
|
|
4538
4578
|
),
|
|
4539
|
-
/* @__PURE__ */
|
|
4540
|
-
/* @__PURE__ */
|
|
4541
|
-
/* @__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)))
|
|
4542
4582
|
);
|
|
4543
4583
|
}),
|
|
4544
|
-
/* @__PURE__ */
|
|
4545
|
-
/* @__PURE__ */
|
|
4546
|
-
/* @__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(
|
|
4547
4587
|
"button",
|
|
4548
4588
|
{
|
|
4549
4589
|
key: idx,
|
|
@@ -4556,13 +4596,13 @@ var ConsultantShowcase = ({
|
|
|
4556
4596
|
};
|
|
4557
4597
|
|
|
4558
4598
|
// src/components/ContentGridBlock.tsx
|
|
4559
|
-
import
|
|
4599
|
+
import React52, { useState as useState32 } from "react";
|
|
4560
4600
|
import Image13 from "next/image";
|
|
4561
|
-
import { HugeiconsIcon as
|
|
4562
|
-
import { Loading03Icon as
|
|
4601
|
+
import { HugeiconsIcon as HugeiconsIcon36 } from "@hugeicons/react";
|
|
4602
|
+
import { Loading03Icon as Loading03Icon19 } from "@hugeicons/core-free-icons";
|
|
4563
4603
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
4564
|
-
const [isLoading, setIsLoading] =
|
|
4565
|
-
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(
|
|
4566
4606
|
Image13,
|
|
4567
4607
|
{
|
|
4568
4608
|
src,
|
|
@@ -4584,14 +4624,159 @@ var ContentGridBlock = ({
|
|
|
4584
4624
|
middleBottomCard,
|
|
4585
4625
|
rightCards
|
|
4586
4626
|
}) => {
|
|
4587
|
-
return /* @__PURE__ */
|
|
4627
|
+
return /* @__PURE__ */ React52.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React52.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ React52.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ React52.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ React52.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ React52.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ React52.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ React52.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React52.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ React52.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ React52.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ React52.createElement("div", null, /* @__PURE__ */ React52.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ React52.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ React52.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React52.createElement(Image13, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ React52.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React52.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ React52.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ React52.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ React52.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React52.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ React52.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ React52.createElement(Image13, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ React52.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ React52.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ React52.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-100 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ React52.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ React52.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React52.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ React52.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ React52.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React52.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ React52.createElement("div", null, /* @__PURE__ */ React52.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ React52.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ React52.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React52.createElement(Image13, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ React52.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React52.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ React52.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ React52.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ React52.createElement("div", { key: idx, className: "relative w-full h-80 rounded-3xl overflow-hidden group" }, /* @__PURE__ */ React52.createElement(
|
|
4588
4628
|
ImageWithLoader2,
|
|
4589
4629
|
{
|
|
4590
4630
|
src: card.bgImageSrc,
|
|
4591
4631
|
alt: card.title,
|
|
4592
4632
|
className: "absolute inset-0 w-full h-full"
|
|
4593
4633
|
}
|
|
4594
|
-
), /* @__PURE__ */
|
|
4634
|
+
), /* @__PURE__ */ React52.createElement("div", { className: "absolute inset-0 bg-black/20 z-20 pointer-events-none" }), /* @__PURE__ */ React52.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ React52.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ React52.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ React52.createElement("div", { className: "pt-3" }, /* @__PURE__ */ React52.createElement("h4", { className: "text-[15px] tracking-wide" }, card.title), /* @__PURE__ */ React52.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
4635
|
+
};
|
|
4636
|
+
|
|
4637
|
+
// src/components/UniversalAppDetails.tsx
|
|
4638
|
+
import React53, { useState as useState33 } from "react";
|
|
4639
|
+
import { HugeiconsIcon as HugeiconsIcon37 } from "@hugeicons/react";
|
|
4640
|
+
import {
|
|
4641
|
+
AppleIcon,
|
|
4642
|
+
AndroidIcon,
|
|
4643
|
+
Download01Icon as Download01Icon2,
|
|
4644
|
+
Bookmark02Icon,
|
|
4645
|
+
Loading03Icon as Loading03Icon20,
|
|
4646
|
+
ArrowDown01Icon as ArrowDown01Icon5,
|
|
4647
|
+
Cancel01Icon as Cancel01Icon5,
|
|
4648
|
+
ArrowLeft01Icon as ArrowLeft01Icon11,
|
|
4649
|
+
ArrowRight01Icon as ArrowRight01Icon9
|
|
4650
|
+
} from "@hugeicons/core-free-icons";
|
|
4651
|
+
var ScreenshotCard = ({ src, alt, onClick }) => {
|
|
4652
|
+
const [isLoading, setIsLoading] = useState33(true);
|
|
4653
|
+
return /* @__PURE__ */ React53.createElement(
|
|
4654
|
+
"button",
|
|
4655
|
+
{
|
|
4656
|
+
onClick,
|
|
4657
|
+
className: "relative w-28 sm:w-32 aspect-9/19 shrink-0 rounded-2xl overflow-hidden bg-neutral-100 border border-neutral-200/50 outline-none hover:opacity-90 transition-opacity"
|
|
4658
|
+
},
|
|
4659
|
+
isLoading && /* @__PURE__ */ React53.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: Loading03Icon20, size: 24, className: "animate-spin text-neutral-400" })),
|
|
4660
|
+
/* @__PURE__ */ React53.createElement(
|
|
4661
|
+
"img",
|
|
4662
|
+
{
|
|
4663
|
+
src,
|
|
4664
|
+
alt,
|
|
4665
|
+
loading: "lazy",
|
|
4666
|
+
onLoad: () => setIsLoading(false),
|
|
4667
|
+
className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
|
|
4668
|
+
}
|
|
4669
|
+
)
|
|
4670
|
+
);
|
|
4671
|
+
};
|
|
4672
|
+
var LightboxImage = ({ src }) => {
|
|
4673
|
+
const [isLoading, setIsLoading] = useState33(true);
|
|
4674
|
+
return /* @__PURE__ */ React53.createElement("div", { className: "relative w-full h-full flex items-center justify-center p-4" }, isLoading && /* @__PURE__ */ React53.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: Loading03Icon20, size: 32, className: "animate-spin text-white" })), /* @__PURE__ */ React53.createElement(
|
|
4675
|
+
"img",
|
|
4676
|
+
{
|
|
4677
|
+
src,
|
|
4678
|
+
alt: "Fullscreen Screenshot",
|
|
4679
|
+
onLoad: () => setIsLoading(false),
|
|
4680
|
+
className: `max-w-full max-h-full object-contain transition-all duration-500 z-20 ${isLoading ? "opacity-0 blur-md" : "opacity-100 blur-0"}`
|
|
4681
|
+
}
|
|
4682
|
+
));
|
|
4683
|
+
};
|
|
4684
|
+
var UniversalAppDetails = ({ app, onBack }) => {
|
|
4685
|
+
const [isLogoLoading, setIsLogoLoading] = useState33(true);
|
|
4686
|
+
const [isDescExpanded, setIsDescExpanded] = useState33(false);
|
|
4687
|
+
const [lightboxIndex, setLightboxIndex] = useState33(null);
|
|
4688
|
+
const MAX_DESC_LENGTH = 150;
|
|
4689
|
+
const isDescLong = app.description.length > MAX_DESC_LENGTH;
|
|
4690
|
+
const displayDesc = isDescExpanded || !isDescLong ? app.description : `${app.description.substring(0, MAX_DESC_LENGTH)}...`;
|
|
4691
|
+
const handlePrev = () => {
|
|
4692
|
+
if (lightboxIndex !== null) {
|
|
4693
|
+
setLightboxIndex(lightboxIndex === 0 ? app.screenshots.length - 1 : lightboxIndex - 1);
|
|
4694
|
+
}
|
|
4695
|
+
};
|
|
4696
|
+
const handleNext = () => {
|
|
4697
|
+
if (lightboxIndex !== null) {
|
|
4698
|
+
setLightboxIndex(lightboxIndex === app.screenshots.length - 1 ? 0 : lightboxIndex + 1);
|
|
4699
|
+
}
|
|
4700
|
+
};
|
|
4701
|
+
return /* @__PURE__ */ React53.createElement("div", { className: "w-full max-w-3xl mx-auto pt-10 pb-20 px-6 min-h-screen flex flex-col items-center" }, /* @__PURE__ */ React53.createElement("div", { className: "flex flex-col sm:flex-row items-start gap-4 w-full mb-10 text-left" }, /* @__PURE__ */ React53.createElement("div", { className: "relative w-20 h-20 sm:w-20 sm:h-20 md:w-24 md:h-24 lg:w-28 lg:h-28 shrink-0 rounded-2xl overflow-hidden flex items-center justify-center border border-neutral-100/50 bg-neutral-50" }, isLogoLoading && /* @__PURE__ */ React53.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100 animate-pulse" }), /* @__PURE__ */ React53.createElement(
|
|
4702
|
+
"img",
|
|
4703
|
+
{
|
|
4704
|
+
src: app.logoSrc,
|
|
4705
|
+
alt: `${app.name} Logo`,
|
|
4706
|
+
onLoad: () => setIsLogoLoading(false),
|
|
4707
|
+
className: `w-full h-full object-cover transition-opacity duration-300 z-20 ${isLogoLoading ? "opacity-0" : "opacity-100"}`
|
|
4708
|
+
}
|
|
4709
|
+
)), /* @__PURE__ */ React53.createElement("div", { className: "flex flex-col justify-center pt-1 min-w-0" }, /* @__PURE__ */ React53.createElement("h1", { className: "text-xl text-black leading-tight mb-1 font-medium" }, /* @__PURE__ */ React53.createElement("span", { className: "block truncate" }, app.name)), /* @__PURE__ */ React53.createElement("span", { className: "text-xs mt-1 text-neutral-400 truncate max-w-full" }, app.tagline), /* @__PURE__ */ React53.createElement("div", { className: "flex flex-wrap items-center mt-4 gap-8 w-full" }, /* @__PURE__ */ React53.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ React53.createElement("div", { className: "flex items-center gap-1.5 h-6 text-neutral-800" }, app.platforms.android && /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: AndroidIcon, size: 18 }), app.platforms.ios && /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: AppleIcon, size: 18 })), /* @__PURE__ */ React53.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Platforms")), /* @__PURE__ */ React53.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ React53.createElement("span", { className: "text-sm font-medium h-6 flex items-center text-neutral-800 truncate" }, app.stats.type), /* @__PURE__ */ React53.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Type")), /* @__PURE__ */ React53.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ React53.createElement("span", { className: "text-sm font-medium h-6 flex items-center text-neutral-800 truncate" }, app.stats.size), /* @__PURE__ */ React53.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Size"))))), /* @__PURE__ */ React53.createElement("div", { className: "flex flex-col sm:flex-row gap-4 items-center w-full mx-auto mb-12" }, app.ctaText && app.ctaHref && /* @__PURE__ */ React53.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ React53.createElement(ThreeDButton, { href: app.ctaHref }, /* @__PURE__ */ React53.createElement("span", { className: "flex items-center justify-center gap-2" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: Download01Icon2, size: 16 }), app.ctaText))), app.secondaryCtaText && app.secondaryCtaHref && /* @__PURE__ */ React53.createElement(
|
|
4710
|
+
"a",
|
|
4711
|
+
{
|
|
4712
|
+
href: app.secondaryCtaHref,
|
|
4713
|
+
className: "w-full sm:w-60 inline-flex items-center justify-center gap-2 text-[11px] tracking-widest rounded-full px-8 py-2.5 border border-neutral-100 text-center text-black hover:bg-neutral-50 outline-none transition-colors"
|
|
4714
|
+
},
|
|
4715
|
+
/* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: Bookmark02Icon, size: 16 }),
|
|
4716
|
+
app.secondaryCtaText
|
|
4717
|
+
)), /* @__PURE__ */ React53.createElement("div", { className: "w-full mb-12" }, /* @__PURE__ */ React53.createElement("h2", { className: "text-xl text-black font-medium mb-4" }, "About"), /* @__PURE__ */ React53.createElement("div", { className: "flex gap-3 overflow-x-auto pb-4 scrollbar-hide -mx-6 px-6" }, app.screenshots.map((src, idx) => /* @__PURE__ */ React53.createElement(
|
|
4718
|
+
ScreenshotCard,
|
|
4719
|
+
{
|
|
4720
|
+
key: idx,
|
|
4721
|
+
src,
|
|
4722
|
+
alt: `${app.name} Screenshot ${idx + 1}`,
|
|
4723
|
+
onClick: () => setLightboxIndex(idx)
|
|
4724
|
+
}
|
|
4725
|
+
))), /* @__PURE__ */ React53.createElement("div", { className: "flex items-end text-neutral-500 text-sm leading-relaxed mt-2" }, /* @__PURE__ */ React53.createElement("p", { className: "flex-1 whitespace-pre-wrap" }, displayDesc), isDescLong && /* @__PURE__ */ React53.createElement(
|
|
4726
|
+
"button",
|
|
4727
|
+
{
|
|
4728
|
+
onClick: () => setIsDescExpanded(!isDescExpanded),
|
|
4729
|
+
className: "ml-2 mb-0.5 text-neutral-400 hover:text-black transition-colors outline-none shrink-0"
|
|
4730
|
+
},
|
|
4731
|
+
/* @__PURE__ */ React53.createElement(
|
|
4732
|
+
HugeiconsIcon37,
|
|
4733
|
+
{
|
|
4734
|
+
icon: ArrowDown01Icon5,
|
|
4735
|
+
size: 18,
|
|
4736
|
+
className: `transform transition-transform ${isDescExpanded ? "rotate-180" : ""}`
|
|
4737
|
+
}
|
|
4738
|
+
)
|
|
4739
|
+
))), lightboxIndex !== null && /* @__PURE__ */ React53.createElement("div", { className: "fixed inset-0 z-50 bg-black/30 flex flex-col" }, /* @__PURE__ */ React53.createElement("div", { className: "w-full p-4 sm:p-6 flex justify-end" }, /* @__PURE__ */ React53.createElement(
|
|
4740
|
+
"button",
|
|
4741
|
+
{
|
|
4742
|
+
onClick: () => setLightboxIndex(null),
|
|
4743
|
+
className: "p-3 text-white bg-white/30 rounded-full transition-colors outline-none"
|
|
4744
|
+
},
|
|
4745
|
+
/* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: Cancel01Icon5, size: 24 })
|
|
4746
|
+
)), /* @__PURE__ */ React53.createElement("div", { className: "flex-1 flex items-center justify-between px-4 sm:px-10 pb-10" }, /* @__PURE__ */ React53.createElement("button", { onClick: handlePrev, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: ArrowLeft01Icon11, size: 24 })), /* @__PURE__ */ React53.createElement("div", { className: "flex-1 h-full max-h-[80vh]" }, /* @__PURE__ */ React53.createElement(LightboxImage, { src: app.screenshots[lightboxIndex] })), /* @__PURE__ */ React53.createElement("button", { onClick: handleNext, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: ArrowRight01Icon9, size: 24 }))), /* @__PURE__ */ React53.createElement("div", { className: "sm:hidden flex justify-between px-8 pb-12 w-full" }, /* @__PURE__ */ React53.createElement("button", { onClick: handlePrev, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: ArrowLeft01Icon11, size: 24 })), /* @__PURE__ */ React53.createElement("button", { onClick: handleNext, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: ArrowRight01Icon9, size: 24 })))));
|
|
4747
|
+
};
|
|
4748
|
+
|
|
4749
|
+
// src/components/UniversalAppCategoryGrid.tsx
|
|
4750
|
+
import React54, { useState as useState34 } from "react";
|
|
4751
|
+
import { HugeiconsIcon as HugeiconsIcon38 } from "@hugeicons/react";
|
|
4752
|
+
import { Loading03Icon as Loading03Icon21 } from "@hugeicons/core-free-icons";
|
|
4753
|
+
var AppGridCard = ({ app }) => {
|
|
4754
|
+
const [isLoading, setIsLoading] = useState34(true);
|
|
4755
|
+
return /* @__PURE__ */ React54.createElement(
|
|
4756
|
+
"button",
|
|
4757
|
+
{
|
|
4758
|
+
onClick: app.onClick,
|
|
4759
|
+
className: "flex flex-col gap-3 group cursor-pointer w-25 text-left outline-none"
|
|
4760
|
+
},
|
|
4761
|
+
/* @__PURE__ */ React54.createElement("div", { className: "relative w-full aspect-square rounded-2xl bg-white overflow-hidden transition-all duration-300 flex items-center justify-center" }, isLoading && /* @__PURE__ */ React54.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ React54.createElement(HugeiconsIcon38, { icon: Loading03Icon21, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React54.createElement(
|
|
4762
|
+
"img",
|
|
4763
|
+
{
|
|
4764
|
+
src: app.logoSrc,
|
|
4765
|
+
alt: app.name,
|
|
4766
|
+
loading: "lazy",
|
|
4767
|
+
onLoad: () => setIsLoading(false),
|
|
4768
|
+
className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
|
|
4769
|
+
}
|
|
4770
|
+
)),
|
|
4771
|
+
/* @__PURE__ */ React54.createElement("div", { className: "flex flex-col min-w-0 px-1" }, /* @__PURE__ */ React54.createElement("span", { className: "text-[13px] text-black tracking-tight truncate group-hover:text-neutral-600 transition-colors" }, app.name), /* @__PURE__ */ React54.createElement("span", { className: "text-[10px] text-neutral-500 tracking-wide truncate mt-0.5" }, app.category))
|
|
4772
|
+
);
|
|
4773
|
+
};
|
|
4774
|
+
var UniversalAppCategoryGrid = ({
|
|
4775
|
+
tagline,
|
|
4776
|
+
categoryTitle,
|
|
4777
|
+
apps
|
|
4778
|
+
}) => {
|
|
4779
|
+
return /* @__PURE__ */ React54.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ React54.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ React54.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React54.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ React54.createElement("div", { className: "relative z-10" }, tagline && /* @__PURE__ */ React54.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), categoryTitle && /* @__PURE__ */ React54.createElement("h2", { className: "text-2xl sm:text-3xl tracking-tight text-black leading-[1.1]" }, categoryTitle))), /* @__PURE__ */ React54.createElement("div", { className: "grid grid-cols-3 sm:grid-cols-4 md:grid-cols-6 lg:grid-cols-8 gap-4 sm:gap-6 px-1" }, apps.map((app) => /* @__PURE__ */ React54.createElement(AppGridCard, { key: app.id, app }))))));
|
|
4595
4780
|
};
|
|
4596
4781
|
export {
|
|
4597
4782
|
AITranscriptionFeature,
|
|
@@ -4629,6 +4814,9 @@ export {
|
|
|
4629
4814
|
ThreeDActionButton,
|
|
4630
4815
|
ThreeDButton,
|
|
4631
4816
|
UniversalAgentConsole,
|
|
4817
|
+
UniversalAppCategoryGrid,
|
|
4818
|
+
UniversalAppDetails,
|
|
4819
|
+
UniversalAppLibrary,
|
|
4632
4820
|
UniversalBillingPage,
|
|
4633
4821
|
UniversalCheckoutView,
|
|
4634
4822
|
UniversalDashboardPage,
|