"use client" import dynamic from "next/dynamic" import type { ComponentType } from "react" import { Icon } from "@iconify/react" import { LandingReveal } from "@/components/landing/landing-reveal" import { ProductSectionHeading } from "@/components/landing/product/product-section-heading" import type { ProductShowcase, ProductShowcaseDemo } from "@/components/landing/product/product-data" import { cn } from "@/lib/utils" function DemoLoading() { return (
Chargement de la démo…
) } // Code splitting : chaque démo est chargée à la demande, côté client uniquement, // pour qu'une page produit n'embarque que ses propres aperçus (et leurs deps lourdes). // `next/dynamic` exige un objet littéral pour les options (pas une variable partagée). const DEMO_COMPONENTS: Record = { "ultimail-inbox": dynamic( () => import("@/components/landing/product/product-demos/ultimail-inbox-demo").then( (m) => m.UltimailInboxDemo ), { loading: DemoLoading, ssr: false } ), "ultimail-compose": dynamic( () => import("@/components/landing/product/product-demos/ultimail-compose-demo").then( (m) => m.UltimailComposeDemo ), { loading: DemoLoading, ssr: false } ), "ultimail-automation": dynamic( () => import("@/components/landing/product/product-demos/ultimail-automation-demo").then( (m) => m.UltimailAutomationDemo ), { loading: DemoLoading, ssr: false } ), "ultidrive-browser": dynamic( () => import("@/components/landing/product/product-demos/ultidrive-browser-demo").then( (m) => m.UltidriveBrowserDemo ), { loading: DemoLoading, ssr: false } ), "ultidrive-docs": dynamic( () => import("@/components/landing/product/product-demos/ultidrive-docs-demo").then( (m) => m.UltidriveDocsDemo ), { loading: DemoLoading, ssr: false } ), "ultidrive-share": dynamic( () => import("@/components/landing/product/product-demos/ultidrive-share-demo").then( (m) => m.UltidriveShareDemo ), { loading: DemoLoading, ssr: false } ), "ultical-agenda": dynamic( () => import("@/components/landing/product/product-demos/ultical-agenda-demo").then( (m) => m.UlticalAgendaDemo ), { loading: DemoLoading, ssr: false } ), "ultical-invitations": dynamic( () => import("@/components/landing/product/product-demos/ultical-invitation-demo").then( (m) => m.UlticalInvitationDemo ), { loading: DemoLoading, ssr: false } ), "ultical-scheduling": dynamic( () => import("@/components/landing/product/product-demos/ultical-scheduling-demo").then( (m) => m.UlticalSchedulingDemo ), { loading: DemoLoading, ssr: false } ), "ultiai-chat": dynamic( () => import("@/components/landing/product/product-demos/ultiai-chat-demo").then( (m) => m.UltiaiChatDemo ), { loading: DemoLoading, ssr: false } ), "ultiai-tools": dynamic( () => import("@/components/landing/product/product-demos/ultiai-tools-demo").then( (m) => m.UltiaiToolsDemo ), { loading: DemoLoading, ssr: false } ), "ultiai-triage": dynamic( () => import("@/components/landing/product/product-demos/ultiai-triage-demo").then( (m) => m.UltiaiTriageDemo ), { loading: DemoLoading, ssr: false } ), "ulticards-directory": dynamic( () => import("@/components/landing/product/product-demos/ulticards-directory-demo").then( (m) => m.UlticardsDirectoryDemo ), { loading: DemoLoading, ssr: false } ), "ulticards-discovery": dynamic( () => import("@/components/landing/product/product-demos/ulticards-discovery-demo").then( (m) => m.UlticardsDiscoveryDemo ), { loading: DemoLoading, ssr: false } ), "ulticards-merge": dynamic( () => import("@/components/landing/product/product-demos/ulticards-merge-demo").then( (m) => m.UlticardsMergeDemo ), { loading: DemoLoading, ssr: false } ), "ultimeet-room": dynamic( () => import("@/components/landing/product/product-demos/ultimeet-room-demo").then( (m) => m.UltimeetRoomDemo ), { loading: DemoLoading, ssr: false } ), "ultimeet-lobby": dynamic( () => import("@/components/landing/product/product-demos/ultimeet-lobby-demo").then( (m) => m.UltimeetLobbyDemo ), { loading: DemoLoading, ssr: false } ), "ultimeet-collab": dynamic( () => import("@/components/landing/product/product-demos/ultimeet-collab-demo").then( (m) => m.UltimeetCollabDemo ), { loading: DemoLoading, ssr: false } ), "admin-migration": dynamic( () => import("@/components/landing/product/product-demos/admin-migration-demo").then( (m) => m.AdminMigrationDemo ), { loading: DemoLoading, ssr: false } ), "admin-identity": dynamic( () => import("@/components/landing/product/product-demos/admin-identity-demo").then( (m) => m.AdminIdentityDemo ), { loading: DemoLoading, ssr: false } ), "admin-users": dynamic( () => import("@/components/landing/product/product-demos/admin-users-demo").then( (m) => m.AdminUsersDemo ), { loading: DemoLoading, ssr: false } ), "admin-quotas": dynamic( () => import("@/components/landing/product/product-demos/admin-quotas-demo").then( (m) => m.AdminQuotasDemo ), { loading: DemoLoading, ssr: false } ), "admin-policies": dynamic( () => import("@/components/landing/product/product-demos/admin-policies-demo").then( (m) => m.AdminPoliciesDemo ), { loading: DemoLoading, ssr: false } ), } export function ProductShowcases({ showcases, accent, }: { showcases: ProductShowcase[] accent: string }) { return ( <> {showcases.map((showcase, index) => { const Demo = DEMO_COMPONENTS[showcase.demo] const reverse = showcase.reverse ?? index % 2 === 1 return (
*:first-child]:order-2 lg:[&>*:last-child]:order-1" )} >
    {showcase.features.map((feature) => (
  • {feature.title}

    {feature.description}

  • ))}
) })} ) }