{"version":3,"sources":["../src/lib/cn.ts","../src/components/Section.tsx","../src/components/Hero.tsx","../src/components/Content.tsx","../src/components/CTA.tsx","../src/components/PresentationWrapper.tsx","../src/hooks/useTracking.ts","../src/config-types.ts","../src/index.ts"],"names":["twMerge","clsx","forwardRef","jsx","jsxs","useRef","useCallback","section","useEffect"],"mappings":"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","file":"index.cjs","sourcesContent":["import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Utility for merging Tailwind CSS classes\n */\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n","'use client'\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react'\nimport { cn } from '../lib/cn'\n\nexport interface SectionProps extends HTMLAttributes<HTMLElement> {\n  /** Unique section identifier for tracking */\n  id: string\n  /** Human-readable label shown in analytics */\n  label?: string\n  /** Section order (auto-detected if not provided) */\n  order?: number\n  /** Full height section (100vh) */\n  fullHeight?: boolean\n  /** Additional className */\n  className?: string\n  /** Section content */\n  children?: ReactNode\n}\n\n/**\n * Trackable Section Component\n *\n * A section that automatically integrates with the Brixon tracking system.\n * The IntersectionObserver in the tracking SDK observes all elements with\n * data-section-id attributes.\n *\n * @example\n * ```tsx\n * <Section id=\"hero\" label=\"Introduction\">\n *   <h1>Welcome</h1>\n * </Section>\n *\n * <Section id=\"features\" label=\"Features\" fullHeight>\n *   <FeatureList />\n * </Section>\n * ```\n */\nexport const Section = forwardRef<HTMLElement, SectionProps>(\n  ({ id, label, order, fullHeight = false, className, children, ...props }, ref) => {\n    return (\n      <section\n        ref={ref}\n        id={id}\n        data-section-id={id}\n        data-section-label={label || id}\n        data-section-order={order}\n        className={cn(\n          'relative',\n          fullHeight && 'min-h-screen',\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </section>\n    )\n  }\n)\n\nSection.displayName = 'Section'\n","'use client'\n\nimport { type ReactNode } from 'react'\nimport { cn } from '../lib/cn'\n\nexport interface HeroProps {\n  /** Presentation title */\n  title: string | ReactNode\n  /** Optional subtitle */\n  subtitle?: string\n  /** Optional year badge */\n  year?: string\n  /** Client name displayed above title */\n  clientName?: string\n  /** Theme variant */\n  theme?: 'dark' | 'light'\n  /** Show scroll indicator */\n  showScrollIndicator?: boolean\n  /** Additional className */\n  className?: string\n}\n\n/**\n * Hero Section Component\n *\n * Full-screen hero section for presentation introductions.\n * Automatically tracked with data-section-id=\"hero\".\n *\n * @example\n * ```tsx\n * <Hero\n *   title=\"Digital Transformation\"\n *   subtitle=\"A Strategic Proposal\"\n *   clientName=\"ACME Corporation\"\n *   year=\"2026\"\n * />\n * ```\n */\nexport function Hero({\n  title,\n  subtitle,\n  year,\n  clientName,\n  theme = 'dark',\n  showScrollIndicator = true,\n  className,\n}: HeroProps) {\n  const isDark = theme === 'dark'\n\n  return (\n    <section\n      data-section-id=\"hero\"\n      data-section-label=\"Start\"\n      className={cn(\n        'relative min-h-screen flex items-center justify-center overflow-hidden',\n        isDark ? 'bg-gray-900 text-white' : 'bg-white text-gray-900',\n        className\n      )}\n    >\n      {/* Year Badge */}\n      {year && (\n        <div className=\"absolute top-12 right-12 md:top-16 md:right-20 z-20\">\n          <span\n            className={cn(\n              'px-5 py-2.5 rounded-full text-sm font-medium',\n              isDark\n                ? 'bg-white/10 text-white border border-white/20'\n                : 'bg-gray-900/10 text-gray-900 border border-gray-900/20'\n            )}\n          >\n            {year}\n          </span>\n        </div>\n      )}\n\n      {/* Main Content */}\n      <div className=\"relative z-10 text-center px-6 md:px-8 max-w-5xl mx-auto\">\n        {/* Client Name Label */}\n        {clientName && (\n          <p\n            className={cn(\n              'text-xs md:text-sm tracking-[0.3em] uppercase mb-8 md:mb-12',\n              isDark ? 'text-white/50' : 'text-gray-900/50'\n            )}\n          >\n            {clientName}\n          </p>\n        )}\n\n        {/* Title */}\n        <h1\n          className={cn(\n            'text-4xl md:text-6xl lg:text-7xl font-bold tracking-tight mb-6 md:mb-8',\n            isDark ? 'text-white' : 'text-gray-900'\n          )}\n        >\n          {title}\n        </h1>\n\n        {/* Subtitle */}\n        {subtitle && (\n          <h2\n            className={cn(\n              'text-xl md:text-2xl lg:text-3xl font-light',\n              isDark ? 'text-white/70' : 'text-gray-900/70'\n            )}\n          >\n            {subtitle}\n          </h2>\n        )}\n\n        {/* Decorative line */}\n        <div\n          className={cn(\n            'mt-12 md:mt-16 mx-auto w-16 h-px',\n            isDark ? 'bg-white/30' : 'bg-gray-900/30'\n          )}\n        />\n      </div>\n\n      {/* Scroll Indicator */}\n      {showScrollIndicator && (\n        <div className=\"absolute bottom-8 md:bottom-12 left-1/2 -translate-x-1/2 z-20\">\n          <div\n            className={cn(\n              'w-6 h-10 border-2 rounded-full flex justify-center pt-2',\n              isDark ? 'border-white/30' : 'border-gray-900/30'\n            )}\n          >\n            <div\n              className={cn(\n                'w-1.5 h-1.5 rounded-full animate-bounce',\n                isDark ? 'bg-white/60' : 'bg-gray-900/60'\n              )}\n            />\n          </div>\n        </div>\n      )}\n    </section>\n  )\n}\n","'use client'\n\nimport { type ReactNode } from 'react'\nimport { cn } from '../lib/cn'\n\nexport interface ContentProps {\n  /** Unique section identifier for tracking */\n  id: string\n  /** Human-readable label shown in analytics */\n  label?: string\n  /** Section headline */\n  headline: string\n  /** Optional subline above headline */\n  subline?: string\n  /** Optional description text */\n  description?: string\n  /** Theme variant */\n  theme?: 'dark' | 'light'\n  /** Additional className */\n  className?: string\n  /** Additional content (children) */\n  children?: ReactNode\n}\n\n/**\n * Content Section Component\n *\n * General-purpose content section for presentations.\n * Automatically tracked with the provided id.\n *\n * @example\n * ```tsx\n * <Content\n *   id=\"challenge\"\n *   label=\"The Challenge\"\n *   headline=\"Current Market Situation\"\n *   description=\"An overview of the challenges facing the industry...\"\n * />\n * ```\n */\nexport function Content({\n  id,\n  label,\n  headline,\n  subline,\n  description,\n  theme = 'dark',\n  className,\n  children,\n}: ContentProps) {\n  const isDark = theme === 'dark'\n\n  return (\n    <section\n      data-section-id={id}\n      data-section-label={label || headline}\n      className={cn(\n        'min-h-screen flex items-center py-24 px-8 md:px-20',\n        isDark ? 'bg-gray-900 text-white' : 'bg-white text-gray-900',\n        className\n      )}\n    >\n      <div className=\"w-full max-w-4xl mx-auto text-center\">\n        {/* Subline */}\n        {subline && (\n          <p\n            className={cn(\n              'text-xs md:text-sm tracking-[0.2em] uppercase mb-4',\n              isDark ? 'text-white/60' : 'text-gray-900/60'\n            )}\n          >\n            {subline}\n          </p>\n        )}\n\n        {/* Headline */}\n        <h2\n          className={cn(\n            'text-3xl md:text-5xl font-bold mb-6 whitespace-pre-line',\n            isDark ? 'text-white' : 'text-gray-900'\n          )}\n        >\n          {headline}\n        </h2>\n\n        {/* Description */}\n        {description && (\n          <p\n            className={cn(\n              'text-lg md:text-xl leading-relaxed max-w-3xl mx-auto',\n              isDark ? 'text-white/80' : 'text-gray-900/80'\n            )}\n          >\n            {description}\n          </p>\n        )}\n\n        {/* Children */}\n        {children && <div className=\"mt-12\">{children}</div>}\n      </div>\n    </section>\n  )\n}\n","'use client'\n\nimport { cn } from '../lib/cn'\n\nexport interface CTAProps {\n  /** Call-to-action headline */\n  headline: string\n  /** Optional subline above headline */\n  subline?: string\n  /** Button text */\n  buttonText?: string\n  /** Button link href */\n  buttonHref?: string\n  /** Button click handler */\n  onButtonClick?: () => void\n  /** Theme variant */\n  theme?: 'dark' | 'light'\n  /** Additional className */\n  className?: string\n}\n\n/**\n * CTA (Call-to-Action) Section Component\n *\n * Final call-to-action section for presentations.\n * Automatically tracked with data-section-id=\"cta\".\n *\n * @example\n * ```tsx\n * <CTA\n *   headline=\"Ready to get started?\"\n *   subline=\"Let's talk\"\n *   buttonText=\"Get in Touch\"\n *   buttonHref=\"mailto:hello@example.com\"\n * />\n * ```\n */\nexport function CTA({\n  headline,\n  subline,\n  buttonText = 'Get in Touch',\n  buttonHref,\n  onButtonClick,\n  theme = 'dark',\n  className,\n}: CTAProps) {\n  const isDark = theme === 'dark'\n\n  const buttonElement = buttonHref ? (\n    <a\n      href={buttonHref}\n      className={cn(\n        'inline-flex items-center px-8 py-4 rounded-full font-medium text-lg transition-all duration-300',\n        isDark\n          ? 'bg-white text-gray-900 hover:bg-gray-100'\n          : 'bg-gray-900 text-white hover:bg-gray-800'\n      )}\n    >\n      {buttonText}\n      <ArrowIcon />\n    </a>\n  ) : (\n    <button\n      onClick={onButtonClick}\n      className={cn(\n        'inline-flex items-center px-8 py-4 rounded-full font-medium text-lg transition-all duration-300',\n        isDark\n          ? 'bg-white text-gray-900 hover:bg-gray-100'\n          : 'bg-gray-900 text-white hover:bg-gray-800'\n      )}\n    >\n      {buttonText}\n      <ArrowIcon />\n    </button>\n  )\n\n  return (\n    <section\n      data-section-id=\"cta\"\n      data-section-label=\"Contact\"\n      className={cn(\n        'relative min-h-screen flex items-center justify-center overflow-hidden',\n        isDark ? 'bg-gray-900 text-white' : 'bg-white text-gray-900',\n        className\n      )}\n    >\n      {/* Content */}\n      <div className=\"relative z-10 text-center px-8 max-w-4xl mx-auto\">\n        {/* Subline */}\n        {subline && (\n          <p\n            className={cn(\n              'text-xs md:text-sm tracking-[0.2em] uppercase mb-6',\n              isDark ? 'text-white/60' : 'text-gray-900/60'\n            )}\n          >\n            {subline}\n          </p>\n        )}\n\n        {/* Headline */}\n        <h2\n          className={cn(\n            'text-4xl md:text-6xl lg:text-7xl font-bold mb-12',\n            isDark ? 'text-white' : 'text-gray-900'\n          )}\n        >\n          {headline}\n        </h2>\n\n        {/* CTA Button */}\n        {buttonElement}\n      </div>\n    </section>\n  )\n}\n\nfunction ArrowIcon() {\n  return (\n    <svg\n      className=\"w-5 h-5 ml-2\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      viewBox=\"0 0 24 24\"\n    >\n      <path d=\"M5 12h14M12 5l7 7-7 7\" />\n    </svg>\n  )\n}\n","import { type ReactNode } from 'react'\nimport type { SectionConfig } from '../index'\n\nexport interface PresentationWrapperProps {\n  /** Presentation title for metadata */\n  title: string\n  /** Section metadata for tracking */\n  sections?: SectionConfig[]\n  /** Presentation content */\n  children: ReactNode\n  /** Additional className for the wrapper */\n  className?: string\n}\n\n/**\n * Presentation Wrapper Component\n *\n * Provides the root structure for a presentation.\n * This is a Server Component - no client-side state or hooks.\n *\n * The wrapper adds data attributes that the tracking SDK uses\n * to identify the presentation and its sections.\n *\n * @example\n * ```tsx\n * <PresentationWrapper\n *   title=\"ACME Corp Proposal\"\n *   sections={[\n *     { id: 'hero', label: 'Introduction', order: 1, type: 'hero' },\n *     { id: 'challenge', label: 'Challenge', order: 2, type: 'content' },\n *   ]}\n * >\n *   <Hero title=\"Digital Transformation\" />\n *   <Content id=\"challenge\" headline=\"The Challenge\" />\n * </PresentationWrapper>\n * ```\n */\nexport function PresentationWrapper({\n  title,\n  sections,\n  children,\n  className,\n}: PresentationWrapperProps) {\n  return (\n    <div\n      data-presentation-title={title}\n      data-presentation-sections={sections ? JSON.stringify(sections.map(s => s.id)) : undefined}\n      className={className}\n    >\n      {children}\n    </div>\n  )\n}\n","'use client'\n\nimport { useEffect, useRef, useCallback } from 'react'\n\n/**\n * Section metadata for tracking\n */\nexport interface SectionMeta {\n  id: string\n  label: string\n  order: number\n  type?: string\n}\n\n/**\n * Tracking configuration\n */\nexport interface UseTrackingOptions {\n  /** Presentation ID for analytics */\n  presentationId: string\n  /** Access link ID (if using access control) */\n  accessLinkId?: string\n  /** Section metadata */\n  sections: SectionMeta[]\n  /** API endpoint for sending events */\n  apiEndpoint?: string\n  /** Whether tracking is enabled */\n  enabled?: boolean\n  /** Viewer email for identity tracking */\n  viewerEmail?: string\n}\n\n/**\n * Analytics event types\n */\ntype EventType =\n  | 'session_start'\n  | 'section_enter'\n  | 'section_exit'\n  | 'section_visible'\n  | 'session_end'\n  | 'engagement'\n\n/**\n * React hook for presentation tracking\n *\n * Initializes the Brixon tracking SDK and provides methods for\n * custom event tracking.\n *\n * @example\n * ```tsx\n * const { trackEngagement, sessionId } = useTracking({\n *   presentationId: 'acme-pitch',\n *   sections: [\n *     { id: 'hero', label: 'Introduction', order: 1 },\n *     { id: 'features', label: 'Features', order: 2 },\n *   ],\n * })\n *\n * // Track custom engagement\n * trackEngagement('cta_click', { buttonId: 'contact' })\n * ```\n */\nexport function useTracking(options: UseTrackingOptions) {\n  const {\n    presentationId,\n    accessLinkId,\n    sections,\n    apiEndpoint = '/api/analytics/track',\n    enabled = true,\n    viewerEmail,\n  } = options\n\n  const sessionIdRef = useRef<string>(\n    typeof crypto !== 'undefined' ? crypto.randomUUID() : `session-${Date.now()}`\n  )\n  const sessionStartRef = useRef<number>(Date.now())\n  const currentSectionRef = useRef<string | null>(null)\n  const sectionTimersRef = useRef<Map<string, number>>(new Map())\n  const eventQueueRef = useRef<Array<Record<string, unknown>>>([])\n  const observerRef = useRef<IntersectionObserver | null>(null)\n\n  // Send events to API\n  const flushEvents = useCallback(async () => {\n    if (eventQueueRef.current.length === 0) return\n\n    const events = [...eventQueueRef.current]\n    eventQueueRef.current = []\n\n    try {\n      await fetch(apiEndpoint, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ events }),\n        keepalive: true,\n      })\n    } catch {\n      // Re-queue on failure\n      eventQueueRef.current = [...events, ...eventQueueRef.current]\n    }\n  }, [apiEndpoint])\n\n  // Track event\n  const trackEvent = useCallback(\n    (type: EventType, data?: Record<string, unknown>) => {\n      const event = {\n        id: crypto.randomUUID(),\n        access_link_id: accessLinkId,\n        session_id: sessionIdRef.current,\n        event_type: type,\n        presentation_id: presentationId,\n        viewer_email: viewerEmail,\n        created_at: new Date().toISOString(),\n        time_on_page: Math.round((Date.now() - sessionStartRef.current) / 1000),\n        ...data,\n      }\n\n      eventQueueRef.current.push(event)\n\n      // Batch flush\n      if (eventQueueRef.current.length >= 10) {\n        flushEvents()\n      }\n    },\n    [accessLinkId, presentationId, viewerEmail, flushEvents]\n  )\n\n  // Section enter handler\n  const onSectionEnter = useCallback(\n    (sectionId: string) => {\n      if (currentSectionRef.current === sectionId) return\n\n      // Exit previous section\n      if (currentSectionRef.current) {\n        const enterTime = sectionTimersRef.current.get(currentSectionRef.current)\n        const duration = enterTime ? Math.round((Date.now() - enterTime) / 1000) : 0\n        const section = sections.find((s) => s.id === currentSectionRef.current)\n\n        trackEvent('section_exit', {\n          section_id: currentSectionRef.current,\n          section_label: section?.label,\n          section_order: section?.order,\n          duration_seconds: duration,\n        })\n\n        sectionTimersRef.current.delete(currentSectionRef.current)\n      }\n\n      // Enter new section\n      currentSectionRef.current = sectionId\n      sectionTimersRef.current.set(sectionId, Date.now())\n\n      const section = sections.find((s) => s.id === sectionId)\n      trackEvent('section_enter', {\n        section_id: sectionId,\n        section_label: section?.label,\n        section_order: section?.order,\n      })\n    },\n    [sections, trackEvent]\n  )\n\n  // Setup tracking\n  useEffect(() => {\n    if (!enabled || typeof window === 'undefined') return\n\n    // Track session start\n    trackEvent('session_start')\n\n    // Setup intersection observer\n    observerRef.current = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          const sectionId = entry.target.getAttribute('data-section-id')\n          if (sectionId && entry.isIntersecting && entry.intersectionRatio > 0.5) {\n            onSectionEnter(sectionId)\n          }\n        })\n      },\n      { threshold: [0, 0.25, 0.5, 0.75, 1] }\n    )\n\n    // Observe sections\n    const sectionElements = document.querySelectorAll('[data-section-id]')\n    sectionElements.forEach((el) => observerRef.current?.observe(el))\n\n    // Batch flush interval\n    const flushInterval = setInterval(flushEvents, 2000)\n\n    // Session end handlers\n    const handleVisibilityChange = () => {\n      if (document.visibilityState === 'hidden') {\n        trackEvent('session_end', {\n          duration_seconds: Math.round((Date.now() - sessionStartRef.current) / 1000),\n        })\n        flushEvents()\n      }\n    }\n\n    const handleBeforeUnload = () => {\n      trackEvent('session_end', {\n        duration_seconds: Math.round((Date.now() - sessionStartRef.current) / 1000),\n      })\n      flushEvents()\n    }\n\n    document.addEventListener('visibilitychange', handleVisibilityChange)\n    window.addEventListener('beforeunload', handleBeforeUnload)\n\n    return () => {\n      clearInterval(flushInterval)\n      observerRef.current?.disconnect()\n      document.removeEventListener('visibilitychange', handleVisibilityChange)\n      window.removeEventListener('beforeunload', handleBeforeUnload)\n    }\n  }, [enabled, trackEvent, onSectionEnter, flushEvents])\n\n  // Manual engagement tracking\n  const trackEngagement = useCallback(\n    (interactionType: string, metadata?: Record<string, unknown>) => {\n      trackEvent('engagement', {\n        metadata: {\n          interaction_type: interactionType,\n          ...metadata,\n        },\n      })\n    },\n    [trackEvent]\n  )\n\n  return {\n    trackEngagement,\n    sessionId: sessionIdRef.current,\n  }\n}\n","/**\n * Browser-safe configuration types and utilities\n *\n * This module contains only browser-safe code (no fs, path, url imports).\n * For Node.js-specific utilities like loadConfig, import from './config'.\n */\n\n/**\n * Brixon configuration interface\n */\nexport interface BrixonConfig {\n  /** Presentation metadata */\n  presentation: {\n    /** Unique slug for the presentation URL */\n    slug: string\n    /** Display title */\n    title: string\n    /** Optional subtitle */\n    subtitle?: string\n    /** Client name */\n    clientName?: string\n  }\n  /** Build options */\n  build?: {\n    /** Output directory (default: dist) */\n    outDir?: string\n    /** Minify output (default: true) */\n    minify?: boolean\n  }\n  /** Dev server options */\n  dev?: {\n    /** Port number (default: 3000) */\n    port?: number\n  }\n  /** Deploy options */\n  deploy?: {\n    /** API key for authentication */\n    apiKey?: string\n  }\n}\n\n/**\n * Define a type-safe Brixon configuration\n *\n * @example\n * ```typescript\n * // brixon.config.ts\n * import { defineConfig } from '@brixon-group/presentation-sdk'\n *\n * export default defineConfig({\n *   presentation: {\n *     slug: 'acme-pitch',\n *     title: 'ACME Digital Transformation',\n *     clientName: 'ACME Corporation',\n *   },\n * })\n * ```\n */\nexport function defineConfig(config: BrixonConfig): BrixonConfig {\n  return config\n}\n","/**\n * @brixon-group/presentation-sdk\n *\n * SDK for building B2B presentations that deploy to the Brixon platform.\n * Primary user: Claude Code (AI coding assistant)\n * Secondary user: Human developers\n */\n\nexport const VERSION = '0.0.1'\n\n/**\n * Configuration for a presentation\n */\nexport interface PresentationConfig {\n  /** Unique slug for the presentation URL */\n  slug: string\n  /** Display title */\n  title: string\n  /** Optional subtitle */\n  subtitle?: string\n  /** Client name */\n  clientName?: string\n  /** Estimated read time in minutes */\n  estimatedReadTime?: number\n}\n\n/**\n * Section metadata for analytics tracking\n */\nexport interface SectionConfig {\n  /** Unique section identifier */\n  id: string\n  /** Display label for analytics */\n  label: string\n  /** Order in presentation */\n  order: number\n  /** Section type for styling */\n  type: 'hero' | 'content' | 'cta' | 'feature' | 'testimonial' | 'pricing'\n}\n\n// Re-export components\nexport {\n  Section,\n  Hero,\n  Content,\n  CTA,\n  PresentationWrapper,\n  cn,\n  type SectionProps,\n  type HeroProps,\n  type ContentProps,\n  type CTAProps,\n  type PresentationWrapperProps,\n} from './components'\n\n// Re-export hooks\nexport * from './hooks'\n\n// Re-export config types and defineConfig (browser-safe)\n// Note: loadConfig is NOT exported here as it uses Node.js modules.\n// CLI commands import it directly from './config'\nexport { defineConfig, type BrixonConfig } from './config-types'\n"]}