@float.js/core 2.0.5 → 2.0.7

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.js CHANGED
@@ -1759,176 +1759,765 @@ var FLOAT_ERROR_OVERLAY = `
1759
1759
  init_esm_shims();
1760
1760
  function generateWelcomePage() {
1761
1761
  return `<!DOCTYPE html>
1762
- <html lang="en">
1762
+ <html lang="en" class="light">
1763
1763
  <head>
1764
1764
  <meta charset="UTF-8">
1765
1765
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
1766
1766
  <title>Welcome to Float.js</title>
1767
1767
  <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'><defs><linearGradient id='g' x1='0%25' y1='100%25' x2='100%25' y2='0%25'><stop offset='0%25' stop-color='%233B82F6'/><stop offset='100%25' stop-color='%238B5CF6'/></linearGradient></defs><path d='M50 145C50 136.716 56.7157 130 65 130H105C113.284 130 120 136.716 120 145C120 153.284 113.284 160 105 160H65C56.7157 160 50 153.284 50 145Z' fill='url(%23g)'/><path d='M50 100C50 91.7157 56.7157 85 65 85H135C143.284 85 150 91.7157 150 100C150 108.284 143.284 115 135 115H65C56.7157 115 50 108.284 50 100Z' fill='url(%23g)'/><path d='M50 55C50 46.7157 56.7157 40 65 40H155C163.284 40 170 46.7157 170 55C170 63.2843 163.284 70 155 70H65C56.7157 70 50 63.2843 50 55Z' fill='url(%23g)'/></svg>">
1768
1768
  <script src="https://cdn.tailwindcss.com"></script>
1769
- <style>
1770
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
1771
-
1772
- * { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; }
1773
-
1774
- @keyframes fade-in {
1775
- from { opacity: 0; transform: translateY(20px); }
1776
- to { opacity: 1; transform: translateY(0); }
1777
- }
1778
-
1779
- @keyframes float {
1780
- 0%, 100% { transform: translateY(0); }
1781
- 50% { transform: translateY(-10px); }
1782
- }
1783
-
1784
- @keyframes pulse-glow {
1785
- 0%, 100% { opacity: 0.4; }
1786
- 50% { opacity: 0.8; }
1769
+ <script>
1770
+ tailwind.config = {
1771
+ darkMode: 'class',
1772
+ theme: {
1773
+ extend: {
1774
+ fontFamily: { sans: ['Inter', 'system-ui', 'sans-serif'] }
1775
+ }
1776
+ }
1787
1777
  }
1788
-
1789
- .animate-fade-in { animation: fade-in 0.8s ease-out forwards; }
1790
- .animate-fade-in-delay { animation: fade-in 0.8s ease-out 0.2s forwards; opacity: 0; }
1791
- .animate-fade-in-delay-2 { animation: fade-in 0.8s ease-out 0.4s forwards; opacity: 0; }
1792
- .animate-fade-in-delay-3 { animation: fade-in 0.8s ease-out 0.6s forwards; opacity: 0; }
1793
- .animate-float { animation: float 3s ease-in-out infinite; }
1794
- .animate-pulse-glow { animation: pulse-glow 4s ease-in-out infinite; }
1778
+ </script>
1779
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
1780
+ <style>
1781
+ @keyframes fade-up { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
1782
+ @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-8px); } }
1783
+ .fade-up { animation: fade-up 0.6s ease-out forwards; }
1784
+ .fade-up-1 { animation: fade-up 0.6s ease-out 0.1s forwards; opacity: 0; }
1785
+ .fade-up-2 { animation: fade-up 0.6s ease-out 0.2s forwards; opacity: 0; }
1786
+ .fade-up-3 { animation: fade-up 0.6s ease-out 0.3s forwards; opacity: 0; }
1787
+ .fade-up-4 { animation: fade-up 0.6s ease-out 0.4s forwards; opacity: 0; }
1788
+ .logo-float { animation: float 4s ease-in-out infinite; }
1795
1789
  </style>
1796
1790
  </head>
1797
- <body class="bg-black text-white min-h-screen flex flex-col">
1791
+ <body class="bg-white dark:bg-zinc-950 text-zinc-900 dark:text-white min-h-screen font-sans transition-colors duration-300">
1798
1792
 
1799
- <!-- Background Effects -->
1800
- <div class="fixed inset-0 pointer-events-none overflow-hidden">
1801
- <!-- Gradient orbs -->
1802
- <div class="absolute -top-40 -right-40 w-96 h-96 bg-blue-500/20 rounded-full blur-3xl animate-pulse-glow"></div>
1803
- <div class="absolute -bottom-40 -left-40 w-96 h-96 bg-violet-500/20 rounded-full blur-3xl animate-pulse-glow" style="animation-delay: 2s;"></div>
1804
-
1805
- <!-- Grid pattern -->
1806
- <div class="absolute inset-0 bg-[linear-gradient(rgba(255,255,255,0.02)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.02)_1px,transparent_1px)] bg-[size:64px_64px]"></div>
1807
- </div>
1793
+ <!-- Header -->
1794
+ <header class="fixed top-0 left-0 right-0 z-50 border-b border-zinc-200 dark:border-zinc-800 bg-white/80 dark:bg-zinc-950/80 backdrop-blur-md">
1795
+ <div class="max-w-6xl mx-auto px-6 h-16 flex items-center justify-between">
1796
+ <!-- Logo -->
1797
+ <div class="flex items-center gap-3">
1798
+ <svg class="w-8 h-8" viewBox="0 0 200 200" fill="none">
1799
+ <defs>
1800
+ <linearGradient id="hdr-grad" x1="50" y1="160" x2="170" y2="40" gradientUnits="userSpaceOnUse">
1801
+ <stop stop-color="#3B82F6"/><stop offset="1" stop-color="#8B5CF6"/>
1802
+ </linearGradient>
1803
+ </defs>
1804
+ <path d="M50 145C50 136.716 56.7157 130 65 130H105C113.284 130 120 136.716 120 145C120 153.284 113.284 160 105 160H65C56.7157 160 50 153.284 50 145Z" fill="url(#hdr-grad)"/>
1805
+ <path d="M50 100C50 91.7157 56.7157 85 65 85H135C143.284 85 150 91.7157 150 100C150 108.284 143.284 115 135 115H65C56.7157 115 50 108.284 50 100Z" fill="url(#hdr-grad)"/>
1806
+ <path d="M50 55C50 46.7157 56.7157 40 65 40H155C163.284 40 170 46.7157 170 55C170 63.2843 163.284 70 155 70H65C56.7157 70 50 63.2843 50 55Z" fill="url(#hdr-grad)"/>
1807
+ </svg>
1808
+ <span class="font-semibold text-lg">Float.js</span>
1809
+ <span class="text-xs px-2 py-0.5 rounded-full bg-gradient-to-r from-blue-500 to-violet-500 text-white font-medium">v2.0.6</span>
1810
+ </div>
1811
+
1812
+ <!-- Nav -->
1813
+ <nav class="hidden sm:flex items-center gap-6">
1814
+ <a href="/__docs" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">Docs</a>
1815
+ <a href="/__learn" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">Learn</a>
1816
+ <a href="/__examples" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">Examples</a>
1817
+ <a href="https://github.com/float-js/float-js" target="_blank" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">GitHub</a>
1818
+ </nav>
1819
+
1820
+ <!-- Dark Mode Toggle -->
1821
+ <button id="theme-toggle" class="p-2 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors" title="Toggle theme">
1822
+ <svg class="w-5 h-5 hidden dark:block" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1823
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"/>
1824
+ </svg>
1825
+ <svg class="w-5 h-5 block dark:hidden" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1826
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"/>
1827
+ </svg>
1828
+ </button>
1829
+ </div>
1830
+ </header>
1808
1831
 
1809
- <!-- Main Content -->
1810
- <main class="flex-1 flex items-center justify-center px-6 relative z-10">
1811
- <div class="max-w-2xl w-full text-center">
1832
+ <!-- Hero Section -->
1833
+ <main class="pt-32 pb-20 px-6">
1834
+ <div class="max-w-4xl mx-auto text-center">
1812
1835
 
1813
1836
  <!-- Logo -->
1814
- <div class="animate-fade-in animate-float mb-8">
1815
- <svg class="w-20 h-20 mx-auto" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
1837
+ <div class="fade-up logo-float mb-8">
1838
+ <svg class="w-24 h-24 mx-auto" viewBox="0 0 200 200" fill="none">
1816
1839
  <defs>
1817
- <linearGradient id="logo-gradient" x1="50" y1="160" x2="170" y2="40" gradientUnits="userSpaceOnUse">
1818
- <stop stop-color="#3B82F6"/>
1819
- <stop offset="1" stop-color="#8B5CF6"/>
1840
+ <linearGradient id="hero-grad" x1="50" y1="160" x2="170" y2="40" gradientUnits="userSpaceOnUse">
1841
+ <stop stop-color="#3B82F6"/><stop offset="1" stop-color="#8B5CF6"/>
1820
1842
  </linearGradient>
1821
1843
  </defs>
1822
- <path d="M50 145C50 136.716 56.7157 130 65 130H105C113.284 130 120 136.716 120 145C120 153.284 113.284 160 105 160H65C56.7157 160 50 153.284 50 145Z" fill="url(#logo-gradient)"/>
1823
- <path d="M50 100C50 91.7157 56.7157 85 65 85H135C143.284 85 150 91.7157 150 100C150 108.284 143.284 115 135 115H65C56.7157 115 50 108.284 50 100Z" fill="url(#logo-gradient)"/>
1824
- <path d="M50 55C50 46.7157 56.7157 40 65 40H155C163.284 40 170 46.7157 170 55C170 63.2843 163.284 70 155 70H65C56.7157 70 50 63.2843 50 55Z" fill="url(#logo-gradient)"/>
1844
+ <path d="M50 145C50 136.716 56.7157 130 65 130H105C113.284 130 120 136.716 120 145C120 153.284 113.284 160 105 160H65C56.7157 160 50 153.284 50 145Z" fill="url(#hero-grad)"/>
1845
+ <path d="M50 100C50 91.7157 56.7157 85 65 85H135C143.284 85 150 91.7157 150 100C150 108.284 143.284 115 135 115H65C56.7157 115 50 108.284 50 100Z" fill="url(#hero-grad)"/>
1846
+ <path d="M50 55C50 46.7157 56.7157 40 65 40H155C163.284 40 170 46.7157 170 55C170 63.2843 163.284 70 155 70H65C56.7157 70 50 63.2843 50 55Z" fill="url(#hero-grad)"/>
1825
1847
  </svg>
1826
1848
  </div>
1827
1849
 
1828
1850
  <!-- Title -->
1829
- <h1 class="animate-fade-in-delay text-4xl sm:text-5xl font-semibold tracking-tight mb-4">
1830
- Welcome to <span class="bg-gradient-to-r from-blue-400 to-violet-400 bg-clip-text text-transparent">Float.js</span>
1851
+ <h1 class="fade-up-1 text-4xl sm:text-6xl font-bold tracking-tight mb-6">
1852
+ The React Framework<br/>
1853
+ <span class="bg-gradient-to-r from-blue-500 to-violet-500 bg-clip-text text-transparent">for the Modern Web</span>
1831
1854
  </h1>
1832
1855
 
1833
1856
  <!-- Subtitle -->
1834
- <p class="animate-fade-in-delay-2 text-lg text-zinc-400 mb-12 max-w-md mx-auto">
1835
- The React framework built for speed. Get started by editing your first page.
1857
+ <p class="fade-up-2 text-lg sm:text-xl text-zinc-600 dark:text-zinc-400 max-w-2xl mx-auto mb-10">
1858
+ Build full-stack React applications with file-based routing, SSR, API routes,
1859
+ and lightning-fast HMR. Get started by creating your first page.
1836
1860
  </p>
1837
1861
 
1862
+ <!-- CTA Buttons -->
1863
+ <div class="fade-up-3 flex flex-col sm:flex-row gap-4 justify-center mb-16">
1864
+ <a href="/__learn"
1865
+ class="inline-flex items-center justify-center gap-2 px-8 py-4 bg-zinc-900 dark:bg-white text-white dark:text-zinc-900 font-semibold rounded-xl hover:bg-zinc-800 dark:hover:bg-zinc-100 transition-all shadow-lg hover:shadow-xl">
1866
+ Get Started
1867
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1868
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"/>
1869
+ </svg>
1870
+ </a>
1871
+ <a href="/__docs"
1872
+ class="inline-flex items-center justify-center gap-2 px-8 py-4 bg-zinc-100 dark:bg-zinc-800 text-zinc-900 dark:text-white font-semibold rounded-xl hover:bg-zinc-200 dark:hover:bg-zinc-700 transition-all">
1873
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1874
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"/>
1875
+ </svg>
1876
+ Documentation
1877
+ </a>
1878
+ </div>
1879
+
1838
1880
  <!-- Code Block -->
1839
- <div class="animate-fade-in-delay-3 bg-zinc-900/80 backdrop-blur-sm border border-zinc-800 rounded-xl p-6 mb-8 text-left">
1881
+ <div class="fade-up-4 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl p-6 text-left max-w-xl mx-auto shadow-sm">
1840
1882
  <div class="flex items-center gap-2 mb-4">
1841
- <div class="w-3 h-3 rounded-full bg-zinc-700"></div>
1842
- <div class="w-3 h-3 rounded-full bg-zinc-700"></div>
1843
- <div class="w-3 h-3 rounded-full bg-zinc-700"></div>
1883
+ <div class="w-3 h-3 rounded-full bg-red-400"></div>
1884
+ <div class="w-3 h-3 rounded-full bg-yellow-400"></div>
1885
+ <div class="w-3 h-3 rounded-full bg-green-400"></div>
1844
1886
  <span class="ml-3 text-xs text-zinc-500 font-mono">app/page.tsx</span>
1845
1887
  </div>
1846
- <pre class="text-sm font-mono overflow-x-auto"><code><span class="text-violet-400">export default</span> <span class="text-blue-400">function</span> <span class="text-yellow-300">Page</span>() {
1847
- <span class="text-violet-400">return</span> (
1848
- <span class="text-zinc-500">&lt;</span><span class="text-blue-300">h1</span><span class="text-zinc-500">&gt;</span><span class="text-zinc-300">Hello, Float.js!</span><span class="text-zinc-500">&lt;/</span><span class="text-blue-300">h1</span><span class="text-zinc-500">&gt;</span>
1888
+ <pre class="text-sm font-mono overflow-x-auto text-zinc-800 dark:text-zinc-200"><code><span class="text-violet-600 dark:text-violet-400">export default</span> <span class="text-blue-600 dark:text-blue-400">function</span> <span class="text-amber-600 dark:text-yellow-300">Page</span>() {
1889
+ <span class="text-violet-600 dark:text-violet-400">return</span> (
1890
+ <span class="text-zinc-500">&lt;</span><span class="text-emerald-600 dark:text-emerald-400">h1</span><span class="text-zinc-500">&gt;</span>Hello, Float.js!<span class="text-zinc-500">&lt;/</span><span class="text-emerald-600 dark:text-emerald-400">h1</span><span class="text-zinc-500">&gt;</span>
1849
1891
  );
1850
1892
  }</code></pre>
1851
1893
  </div>
1852
1894
 
1853
- <!-- Action Buttons -->
1854
- <div class="animate-fade-in-delay-3 flex flex-col sm:flex-row gap-4 justify-center">
1855
- <a href="https://floatjs.dev/docs" target="_blank"
1856
- class="inline-flex items-center justify-center gap-2 px-6 py-3 bg-white text-black font-medium rounded-lg hover:bg-zinc-200 transition-colors">
1857
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1858
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"/>
1859
- </svg>
1860
- Read the Docs
1861
- </a>
1862
- <a href="https://github.com/float-js/float-js" target="_blank"
1863
- class="inline-flex items-center justify-center gap-2 px-6 py-3 bg-zinc-900 text-white font-medium rounded-lg border border-zinc-800 hover:bg-zinc-800 hover:border-zinc-700 transition-colors">
1864
- <svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24">
1865
- <path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"/>
1866
- </svg>
1867
- View on GitHub
1868
- </a>
1869
- </div>
1895
+ </div>
1896
+ </main>
1897
+
1898
+ <!-- Features Section -->
1899
+ <section class="py-20 px-6 bg-zinc-50 dark:bg-zinc-900/50">
1900
+ <div class="max-w-6xl mx-auto">
1901
+ <h2 class="text-2xl sm:text-3xl font-bold text-center mb-4">Built for Performance</h2>
1902
+ <p class="text-zinc-600 dark:text-zinc-400 text-center mb-12 max-w-xl mx-auto">
1903
+ Everything you need to build fast, modern web applications
1904
+ </p>
1870
1905
 
1871
- <!-- Quick Commands -->
1872
- <div class="animate-fade-in-delay-3 mt-12 grid grid-cols-1 sm:grid-cols-3 gap-4 text-left">
1873
- <div class="p-4 bg-zinc-900/50 border border-zinc-800/50 rounded-lg">
1874
- <div class="text-xs text-zinc-500 mb-1 font-mono">Create page</div>
1875
- <code class="text-sm text-zinc-300 font-mono">mkdir app && touch app/page.tsx</code>
1906
+ <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
1907
+
1908
+ <!-- Feature 1 -->
1909
+ <div class="p-6 bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl hover:border-blue-500 dark:hover:border-blue-500 transition-colors">
1910
+ <div class="w-12 h-12 bg-blue-100 dark:bg-blue-500/20 rounded-xl flex items-center justify-center mb-4">
1911
+ <svg class="w-6 h-6 text-blue-600 dark:text-blue-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1912
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"/>
1913
+ </svg>
1914
+ </div>
1915
+ <h3 class="font-semibold text-lg mb-2">Lightning Fast HMR</h3>
1916
+ <p class="text-sm text-zinc-600 dark:text-zinc-400">Instant hot module replacement. See your changes in milliseconds without losing state.</p>
1876
1917
  </div>
1877
- <div class="p-4 bg-zinc-900/50 border border-zinc-800/50 rounded-lg">
1878
- <div class="text-xs text-zinc-500 mb-1 font-mono">Add route</div>
1879
- <code class="text-sm text-zinc-300 font-mono">touch app/about/page.tsx</code>
1918
+
1919
+ <!-- Feature 2 -->
1920
+ <div class="p-6 bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl hover:border-violet-500 dark:hover:border-violet-500 transition-colors">
1921
+ <div class="w-12 h-12 bg-violet-100 dark:bg-violet-500/20 rounded-xl flex items-center justify-center mb-4">
1922
+ <svg class="w-6 h-6 text-violet-600 dark:text-violet-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1923
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"/>
1924
+ </svg>
1925
+ </div>
1926
+ <h3 class="font-semibold text-lg mb-2">File-Based Routing</h3>
1927
+ <p class="text-sm text-zinc-600 dark:text-zinc-400">Create routes by adding files to the app directory. Dynamic routes, layouts, and more.</p>
1880
1928
  </div>
1881
- <div class="p-4 bg-zinc-900/50 border border-zinc-800/50 rounded-lg">
1882
- <div class="text-xs text-zinc-500 mb-1 font-mono">API route</div>
1883
- <code class="text-sm text-zinc-300 font-mono">touch app/api/route.ts</code>
1929
+
1930
+ <!-- Feature 3 -->
1931
+ <div class="p-6 bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl hover:border-emerald-500 dark:hover:border-emerald-500 transition-colors">
1932
+ <div class="w-12 h-12 bg-emerald-100 dark:bg-emerald-500/20 rounded-xl flex items-center justify-center mb-4">
1933
+ <svg class="w-6 h-6 text-emerald-600 dark:text-emerald-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1934
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2"/>
1935
+ </svg>
1936
+ </div>
1937
+ <h3 class="font-semibold text-lg mb-2">Server-Side Rendering</h3>
1938
+ <p class="text-sm text-zinc-600 dark:text-zinc-400">Automatic SSR for optimal SEO and performance. Hybrid rendering strategies.</p>
1884
1939
  </div>
1940
+
1941
+ <!-- Feature 4 -->
1942
+ <div class="p-6 bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl hover:border-amber-500 dark:hover:border-amber-500 transition-colors">
1943
+ <div class="w-12 h-12 bg-amber-100 dark:bg-amber-500/20 rounded-xl flex items-center justify-center mb-4">
1944
+ <svg class="w-6 h-6 text-amber-600 dark:text-amber-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1945
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"/>
1946
+ </svg>
1947
+ </div>
1948
+ <h3 class="font-semibold text-lg mb-2">API Routes</h3>
1949
+ <p class="text-sm text-zinc-600 dark:text-zinc-400">Build your backend API with simple route handlers. Full TypeScript support.</p>
1950
+ </div>
1951
+
1952
+ <!-- Feature 5 -->
1953
+ <div class="p-6 bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl hover:border-pink-500 dark:hover:border-pink-500 transition-colors">
1954
+ <div class="w-12 h-12 bg-pink-100 dark:bg-pink-500/20 rounded-xl flex items-center justify-center mb-4">
1955
+ <svg class="w-6 h-6 text-pink-600 dark:text-pink-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1956
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"/>
1957
+ </svg>
1958
+ </div>
1959
+ <h3 class="font-semibold text-lg mb-2">Built-in AI Integration</h3>
1960
+ <p class="text-sm text-zinc-600 dark:text-zinc-400">First-class support for AI streaming, OpenAI, Anthropic, and more.</p>
1961
+ </div>
1962
+
1963
+ <!-- Feature 6 -->
1964
+ <div class="p-6 bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl hover:border-cyan-500 dark:hover:border-cyan-500 transition-colors">
1965
+ <div class="w-12 h-12 bg-cyan-100 dark:bg-cyan-500/20 rounded-xl flex items-center justify-center mb-4">
1966
+ <svg class="w-6 h-6 text-cyan-600 dark:text-cyan-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1967
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"/>
1968
+ </svg>
1969
+ </div>
1970
+ <h3 class="font-semibold text-lg mb-2">Developer Experience</h3>
1971
+ <p class="text-sm text-zinc-600 dark:text-zinc-400">Error overlay, DevTools, and debugging utilities built-in for a smooth workflow.</p>
1972
+ </div>
1973
+
1885
1974
  </div>
1975
+ </div>
1976
+ </section>
1977
+
1978
+ <!-- Quick Start Section -->
1979
+ <section class="py-20 px-6">
1980
+ <div class="max-w-4xl mx-auto">
1981
+ <h2 class="text-2xl sm:text-3xl font-bold text-center mb-4">Get Started in Seconds</h2>
1982
+ <p class="text-zinc-600 dark:text-zinc-400 text-center mb-12">Create your first page and see it live</p>
1886
1983
 
1984
+ <div class="grid grid-cols-1 sm:grid-cols-3 gap-4">
1985
+ <div class="p-5 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl">
1986
+ <div class="text-xs text-zinc-500 mb-2 uppercase tracking-wider">1. Create page</div>
1987
+ <code class="text-sm font-mono text-zinc-700 dark:text-zinc-300">touch app/page.tsx</code>
1988
+ </div>
1989
+ <div class="p-5 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl">
1990
+ <div class="text-xs text-zinc-500 mb-2 uppercase tracking-wider">2. Add route</div>
1991
+ <code class="text-sm font-mono text-zinc-700 dark:text-zinc-300">mkdir app/about</code>
1992
+ </div>
1993
+ <div class="p-5 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl">
1994
+ <div class="text-xs text-zinc-500 mb-2 uppercase tracking-wider">3. API route</div>
1995
+ <code class="text-sm font-mono text-zinc-700 dark:text-zinc-300">touch app/api/route.ts</code>
1996
+ </div>
1997
+ </div>
1887
1998
  </div>
1888
- </main>
1999
+ </section>
1889
2000
 
1890
2001
  <!-- Footer -->
1891
- <footer class="relative z-10 border-t border-zinc-800/50 py-8 px-6">
1892
- <div class="max-w-2xl mx-auto flex flex-col sm:flex-row items-center justify-between gap-4">
2002
+ <footer class="border-t border-zinc-200 dark:border-zinc-800 py-12 px-6 bg-zinc-50 dark:bg-zinc-900/50">
2003
+ <div class="max-w-6xl mx-auto">
2004
+ <div class="grid grid-cols-1 sm:grid-cols-4 gap-8 mb-12">
2005
+
2006
+ <!-- Brand -->
2007
+ <div class="sm:col-span-1">
2008
+ <div class="flex items-center gap-2 mb-4">
2009
+ <svg class="w-8 h-8" viewBox="0 0 200 200" fill="none">
2010
+ <defs>
2011
+ <linearGradient id="ftr-grad" x1="50" y1="160" x2="170" y2="40" gradientUnits="userSpaceOnUse">
2012
+ <stop stop-color="#3B82F6"/><stop offset="1" stop-color="#8B5CF6"/>
2013
+ </linearGradient>
2014
+ </defs>
2015
+ <path d="M50 145C50 136.716 56.7157 130 65 130H105C113.284 130 120 136.716 120 145C120 153.284 113.284 160 105 160H65C56.7157 160 50 153.284 50 145Z" fill="url(#ftr-grad)"/>
2016
+ <path d="M50 100C50 91.7157 56.7157 85 65 85H135C143.284 85 150 91.7157 150 100C150 108.284 143.284 115 135 115H65C56.7157 115 50 108.284 50 100Z" fill="url(#ftr-grad)"/>
2017
+ <path d="M50 55C50 46.7157 56.7157 40 65 40H155C163.284 40 170 46.7157 170 55C170 63.2843 163.284 70 155 70H65C56.7157 70 50 63.2843 50 55Z" fill="url(#ftr-grad)"/>
2018
+ </svg>
2019
+ <span class="font-semibold text-lg">Float.js</span>
2020
+ </div>
2021
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">
2022
+ The React framework for the modern web.
2023
+ </p>
2024
+ </div>
2025
+
2026
+ <!-- Resources -->
2027
+ <div>
2028
+ <h4 class="font-semibold mb-4 text-sm">Resources</h4>
2029
+ <ul class="space-y-2">
2030
+ <li><a href="/__docs" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">Documentation</a></li>
2031
+ <li><a href="/__learn" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">Learn Float.js</a></li>
2032
+ <li><a href="/__examples" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">Examples</a></li>
2033
+ <li><a href="https://github.com/float-js/float-js" target="_blank" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">Blog</a></li>
2034
+ </ul>
2035
+ </div>
2036
+
2037
+ <!-- More -->
2038
+ <div>
2039
+ <h4 class="font-semibold mb-4 text-sm">More</h4>
2040
+ <ul class="space-y-2">
2041
+ <li><a href="https://github.com/float-js/float-js" target="_blank" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">GitHub</a></li>
2042
+ <li><a href="https://github.com/float-js/float-js/releases" target="_blank" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">Releases</a></li>
2043
+ <li><a href="https://x.com/floatjs" target="_blank" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">Twitter</a></li>
2044
+ </ul>
2045
+ </div>
2046
+
2047
+ <!-- Legal -->
2048
+ <div>
2049
+ <h4 class="font-semibold mb-4 text-sm">Legal</h4>
2050
+ <ul class="space-y-2">
2051
+ <li><a href="https://github.com/float-js/float-js/blob/main/LICENSE" target="_blank" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">MIT License</a></li>
2052
+ <li><a href="https://github.com/float-js/float-js" target="_blank" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">Contribute</a></li>
2053
+ </ul>
2054
+ </div>
2055
+
2056
+ </div>
1893
2057
 
1894
- <!-- Left: Logo + Version -->
1895
- <div class="flex items-center gap-3">
1896
- <svg class="w-6 h-6" viewBox="0 0 200 200" fill="none">
2058
+ <!-- Bottom -->
2059
+ <div class="pt-8 border-t border-zinc-200 dark:border-zinc-800 flex flex-col sm:flex-row items-center justify-between gap-4">
2060
+ <p class="text-sm text-zinc-500">
2061
+ \xA9 2024-2026 Float.js. Created by <span class="text-zinc-700 dark:text-zinc-300 font-medium">Peter Fulle</span>
2062
+ </p>
2063
+ <div class="flex items-center gap-4">
2064
+ <a href="mailto:prfulle@gmail.com" class="text-sm text-zinc-500 hover:text-zinc-900 dark:hover:text-white transition-colors">prfulle@gmail.com</a>
2065
+ <a href="https://github.com/float-js/float-js" target="_blank" class="text-zinc-500 hover:text-zinc-900 dark:hover:text-white transition-colors">
2066
+ <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"/></svg>
2067
+ </a>
2068
+ <a href="https://x.com/floatjs" target="_blank" class="text-zinc-500 hover:text-zinc-900 dark:hover:text-white transition-colors">
2069
+ <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg>
2070
+ </a>
2071
+ </div>
2072
+ </div>
2073
+ </div>
2074
+ </footer>
2075
+
2076
+ <!-- Theme Toggle Script -->
2077
+ <script>
2078
+ const toggle = document.getElementById('theme-toggle');
2079
+ const html = document.documentElement;
2080
+
2081
+ // Check for saved theme or system preference
2082
+ if (localStorage.theme === 'dark' || (!localStorage.theme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
2083
+ html.classList.add('dark');
2084
+ html.classList.remove('light');
2085
+ }
2086
+
2087
+ toggle.addEventListener('click', () => {
2088
+ html.classList.toggle('dark');
2089
+ html.classList.toggle('light');
2090
+ localStorage.theme = html.classList.contains('dark') ? 'dark' : 'light';
2091
+ });
2092
+ </script>
2093
+
2094
+ </body>
2095
+ </html>`;
2096
+ }
2097
+
2098
+ // src/client/docs-pages.ts
2099
+ init_esm_shims();
2100
+ var baseStyles = `
2101
+ <!DOCTYPE html>
2102
+ <html lang="en" class="light">
2103
+ <head>
2104
+ <meta charset="UTF-8">
2105
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
2106
+ <title>%TITLE% - Float.js</title>
2107
+ <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'><defs><linearGradient id='g' x1='0%25' y1='100%25' x2='100%25' y2='0%25'><stop offset='0%25' stop-color='%233B82F6'/><stop offset='100%25' stop-color='%238B5CF6'/></linearGradient></defs><path d='M50 145C50 136.716 56.7157 130 65 130H105C113.284 130 120 136.716 120 145C120 153.284 113.284 160 105 160H65C56.7157 160 50 153.284 50 145Z' fill='url(%23g)'/><path d='M50 100C50 91.7157 56.7157 85 65 85H135C143.284 85 150 91.7157 150 100C150 108.284 143.284 115 135 115H65C56.7157 115 50 108.284 50 100Z' fill='url(%23g)'/><path d='M50 55C50 46.7157 56.7157 40 65 40H155C163.284 40 170 46.7157 170 55C170 63.2843 163.284 70 155 70H65C56.7157 70 50 63.2843 50 55Z' fill='url(%23g)'/></svg>">
2108
+ <script src="https://cdn.tailwindcss.com"></script>
2109
+ <script>
2110
+ tailwind.config = {
2111
+ darkMode: 'class',
2112
+ theme: { extend: { fontFamily: { sans: ['Inter', 'system-ui', 'sans-serif'] } } }
2113
+ }
2114
+ </script>
2115
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
2116
+ <style>
2117
+ .prose code { background: #f4f4f5; padding: 2px 6px; border-radius: 4px; font-size: 0.875em; }
2118
+ .dark .prose code { background: #27272a; }
2119
+ .prose pre { background: #18181b; padding: 1rem; border-radius: 0.75rem; overflow-x: auto; }
2120
+ .prose pre code { background: transparent; padding: 0; }
2121
+ </style>
2122
+ </head>
2123
+ <body class="bg-white dark:bg-zinc-950 text-zinc-900 dark:text-white min-h-screen font-sans">
2124
+ `;
2125
+ var header = `
2126
+ <!-- Header -->
2127
+ <header class="sticky top-0 z-50 border-b border-zinc-200 dark:border-zinc-800 bg-white/80 dark:bg-zinc-950/80 backdrop-blur-md">
2128
+ <div class="max-w-6xl mx-auto px-6 h-16 flex items-center justify-between">
2129
+ <a href="/" class="flex items-center gap-3">
2130
+ <svg class="w-8 h-8" viewBox="0 0 200 200" fill="none">
1897
2131
  <defs>
1898
- <linearGradient id="footer-gradient" x1="50" y1="160" x2="170" y2="40" gradientUnits="userSpaceOnUse">
1899
- <stop stop-color="#3B82F6"/>
1900
- <stop offset="1" stop-color="#8B5CF6"/>
2132
+ <linearGradient id="hdr-grad" x1="50" y1="160" x2="170" y2="40" gradientUnits="userSpaceOnUse">
2133
+ <stop stop-color="#3B82F6"/><stop offset="1" stop-color="#8B5CF6"/>
1901
2134
  </linearGradient>
1902
2135
  </defs>
1903
- <path d="M50 145C50 136.716 56.7157 130 65 130H105C113.284 130 120 136.716 120 145C120 153.284 113.284 160 105 160H65C56.7157 160 50 153.284 50 145Z" fill="url(#footer-gradient)"/>
1904
- <path d="M50 100C50 91.7157 56.7157 85 65 85H135C143.284 85 150 91.7157 150 100C150 108.284 143.284 115 135 115H65C56.7157 115 50 108.284 50 100Z" fill="url(#footer-gradient)"/>
1905
- <path d="M50 55C50 46.7157 56.7157 40 65 40H155C163.284 40 170 46.7157 170 55C170 63.2843 163.284 70 155 70H65C56.7157 70 50 63.2843 50 55Z" fill="url(#footer-gradient)"/>
2136
+ <path d="M50 145C50 136.716 56.7157 130 65 130H105C113.284 130 120 136.716 120 145C120 153.284 113.284 160 105 160H65C56.7157 160 50 153.284 50 145Z" fill="url(#hdr-grad)"/>
2137
+ <path d="M50 100C50 91.7157 56.7157 85 65 85H135C143.284 85 150 91.7157 150 100C150 108.284 143.284 115 135 115H65C56.7157 115 50 108.284 50 100Z" fill="url(#hdr-grad)"/>
2138
+ <path d="M50 55C50 46.7157 56.7157 40 65 40H155C163.284 40 170 46.7157 170 55C170 63.2843 163.284 70 155 70H65C56.7157 70 50 63.2843 50 55Z" fill="url(#hdr-grad)"/>
1906
2139
  </svg>
1907
- <span class="text-sm text-zinc-500">Float.js v2.0.4</span>
2140
+ <span class="font-semibold text-lg">Float.js</span>
2141
+ </a>
2142
+ <nav class="flex items-center gap-6">
2143
+ <a href="/__docs" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">Docs</a>
2144
+ <a href="/__learn" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">Learn</a>
2145
+ <a href="/__examples" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">Examples</a>
2146
+ <a href="https://github.com/float-js/float-js" target="_blank" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors">GitHub</a>
2147
+ <button id="theme-toggle" class="p-2 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors">
2148
+ <svg class="w-5 h-5 hidden dark:block" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"/></svg>
2149
+ <svg class="w-5 h-5 block dark:hidden" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"/></svg>
2150
+ </button>
2151
+ </nav>
2152
+ </div>
2153
+ </header>
2154
+ `;
2155
+ var footer = `
2156
+ <!-- Footer -->
2157
+ <footer class="border-t border-zinc-200 dark:border-zinc-800 py-8 px-6 bg-zinc-50 dark:bg-zinc-900/50">
2158
+ <div class="max-w-6xl mx-auto flex flex-col sm:flex-row items-center justify-between gap-4">
2159
+ <p class="text-sm text-zinc-500">\xA9 2024-2026 Float.js. Created by Peter Fulle</p>
2160
+ <div class="flex items-center gap-4">
2161
+ <a href="mailto:prfulle@gmail.com" class="text-sm text-zinc-500 hover:text-zinc-900 dark:hover:text-white transition-colors">prfulle@gmail.com</a>
2162
+ <a href="https://github.com/float-js/float-js" target="_blank" class="text-zinc-500 hover:text-zinc-900 dark:hover:text-white transition-colors">
2163
+ <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"/></svg>
2164
+ </a>
1908
2165
  </div>
2166
+ </div>
2167
+ </footer>
2168
+ <script>
2169
+ const toggle = document.getElementById('theme-toggle');
2170
+ const html = document.documentElement;
2171
+ if (localStorage.theme === 'dark' || (!localStorage.theme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
2172
+ html.classList.add('dark'); html.classList.remove('light');
2173
+ }
2174
+ toggle?.addEventListener('click', () => {
2175
+ html.classList.toggle('dark'); html.classList.toggle('light');
2176
+ localStorage.theme = html.classList.contains('dark') ? 'dark' : 'light';
2177
+ });
2178
+ </script>
2179
+ </body>
2180
+ </html>
2181
+ `;
2182
+ function generateDocsPage() {
2183
+ return baseStyles.replace("%TITLE%", "Documentation") + header + `
2184
+ <div class="flex">
2185
+ <!-- Sidebar -->
2186
+ <aside class="hidden lg:block w-64 border-r border-zinc-200 dark:border-zinc-800 min-h-[calc(100vh-4rem)] p-6">
2187
+ <nav class="space-y-6">
2188
+ <div>
2189
+ <h3 class="font-semibold text-sm mb-3">Getting Started</h3>
2190
+ <ul class="space-y-2">
2191
+ <li><a href="#installation" class="text-sm text-blue-600 dark:text-blue-400 font-medium">Installation</a></li>
2192
+ <li><a href="#project-structure" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white">Project Structure</a></li>
2193
+ <li><a href="#routing" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white">Routing</a></li>
2194
+ </ul>
2195
+ </div>
2196
+ <div>
2197
+ <h3 class="font-semibold text-sm mb-3">Core Concepts</h3>
2198
+ <ul class="space-y-2">
2199
+ <li><a href="#pages" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white">Pages</a></li>
2200
+ <li><a href="#layouts" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white">Layouts</a></li>
2201
+ <li><a href="#api-routes" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white">API Routes</a></li>
2202
+ </ul>
2203
+ </div>
2204
+ <div>
2205
+ <h3 class="font-semibold text-sm mb-3">Features</h3>
2206
+ <ul class="space-y-2">
2207
+ <li><a href="#ssr" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white">Server Rendering</a></li>
2208
+ <li><a href="#hmr" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white">Hot Module Replacement</a></li>
2209
+ <li><a href="#ai" class="text-sm text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-white">AI Integration</a></li>
2210
+ </ul>
2211
+ </div>
2212
+ </nav>
2213
+ </aside>
2214
+
2215
+ <!-- Main Content -->
2216
+ <main class="flex-1 max-w-3xl mx-auto px-6 py-12 prose dark:prose-invert">
2217
+ <h1 id="installation" class="text-4xl font-bold mb-4">Documentation</h1>
2218
+ <p class="text-lg text-zinc-600 dark:text-zinc-400 mb-8">Learn how to build modern web applications with Float.js</p>
1909
2219
 
1910
- <!-- Center: Creator Info -->
1911
- <div class="text-center">
1912
- <p class="text-sm text-zinc-400">
1913
- Created by <span class="text-white font-medium">Peter Fulle</span>
1914
- </p>
1915
- <a href="mailto:prfulle@gmail.com" class="text-xs text-zinc-500 hover:text-zinc-400 transition-colors">
1916
- prfulle@gmail.com
2220
+ <h2 class="text-2xl font-semibold mt-12 mb-4">Installation</h2>
2221
+ <p class="mb-4">Create a new Float.js project with a single command:</p>
2222
+ <pre class="bg-zinc-900 text-zinc-100 p-4 rounded-xl mb-6"><code class="font-mono">npx create-float@latest my-app
2223
+ cd my-app
2224
+ npm run dev</code></pre>
2225
+
2226
+ <h2 id="project-structure" class="text-2xl font-semibold mt-12 mb-4">Project Structure</h2>
2227
+ <p class="mb-4">Float.js uses a file-based routing system. Your project structure looks like this:</p>
2228
+ <pre class="bg-zinc-900 text-zinc-100 p-4 rounded-xl mb-6"><code class="font-mono">my-app/
2229
+ \u251C\u2500\u2500 app/
2230
+ \u2502 \u251C\u2500\u2500 page.tsx # Home page (/)
2231
+ \u2502 \u251C\u2500\u2500 layout.tsx # Root layout
2232
+ \u2502 \u251C\u2500\u2500 about/
2233
+ \u2502 \u2502 \u2514\u2500\u2500 page.tsx # About page (/about)
2234
+ \u2502 \u2514\u2500\u2500 api/
2235
+ \u2502 \u2514\u2500\u2500 route.ts # API route (/api)
2236
+ \u251C\u2500\u2500 public/ # Static assets
2237
+ \u2514\u2500\u2500 package.json</code></pre>
2238
+
2239
+ <h2 id="routing" class="text-2xl font-semibold mt-12 mb-4">Routing</h2>
2240
+ <p class="mb-4">Routes are automatically generated based on your file structure:</p>
2241
+ <div class="bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl p-6 mb-6">
2242
+ <table class="w-full text-sm">
2243
+ <thead>
2244
+ <tr class="text-left border-b border-zinc-200 dark:border-zinc-700">
2245
+ <th class="pb-3 font-semibold">File</th>
2246
+ <th class="pb-3 font-semibold">Route</th>
2247
+ </tr>
2248
+ </thead>
2249
+ <tbody class="font-mono">
2250
+ <tr class="border-b border-zinc-100 dark:border-zinc-800"><td class="py-3">app/page.tsx</td><td class="py-3 text-blue-600 dark:text-blue-400">/</td></tr>
2251
+ <tr class="border-b border-zinc-100 dark:border-zinc-800"><td class="py-3">app/about/page.tsx</td><td class="py-3 text-blue-600 dark:text-blue-400">/about</td></tr>
2252
+ <tr class="border-b border-zinc-100 dark:border-zinc-800"><td class="py-3">app/blog/[slug]/page.tsx</td><td class="py-3 text-blue-600 dark:text-blue-400">/blog/:slug</td></tr>
2253
+ <tr><td class="py-3">app/api/users/route.ts</td><td class="py-3 text-blue-600 dark:text-blue-400">/api/users</td></tr>
2254
+ </tbody>
2255
+ </table>
2256
+ </div>
2257
+
2258
+ <h2 id="pages" class="text-2xl font-semibold mt-12 mb-4">Creating Pages</h2>
2259
+ <p class="mb-4">Each page exports a default React component:</p>
2260
+ <pre class="bg-zinc-900 text-zinc-100 p-4 rounded-xl mb-6"><code class="font-mono"><span class="text-violet-400">export default</span> <span class="text-blue-400">function</span> <span class="text-yellow-300">Page</span>() {
2261
+ <span class="text-violet-400">return</span> (
2262
+ <span class="text-zinc-500">&lt;</span><span class="text-emerald-400">div</span><span class="text-zinc-500">&gt;</span>
2263
+ <span class="text-zinc-500">&lt;</span><span class="text-emerald-400">h1</span><span class="text-zinc-500">&gt;</span>Welcome to my page<span class="text-zinc-500">&lt;/</span><span class="text-emerald-400">h1</span><span class="text-zinc-500">&gt;</span>
2264
+ <span class="text-zinc-500">&lt;/</span><span class="text-emerald-400">div</span><span class="text-zinc-500">&gt;</span>
2265
+ );
2266
+ }</code></pre>
2267
+
2268
+ <h2 id="api-routes" class="text-2xl font-semibold mt-12 mb-4">API Routes</h2>
2269
+ <p class="mb-4">Create API endpoints by exporting HTTP method handlers:</p>
2270
+ <pre class="bg-zinc-900 text-zinc-100 p-4 rounded-xl mb-6"><code class="font-mono"><span class="text-violet-400">export async function</span> <span class="text-yellow-300">GET</span>(<span class="text-orange-400">request</span>: Request) {
2271
+ <span class="text-violet-400">return</span> Response.json({ message: <span class="text-emerald-400">'Hello from API!'</span> });
2272
+ }
2273
+
2274
+ <span class="text-violet-400">export async function</span> <span class="text-yellow-300">POST</span>(<span class="text-orange-400">request</span>: Request) {
2275
+ <span class="text-violet-400">const</span> body = <span class="text-violet-400">await</span> request.json();
2276
+ <span class="text-violet-400">return</span> Response.json({ received: body });
2277
+ }</code></pre>
2278
+
2279
+ <div class="mt-12 p-6 bg-gradient-to-r from-blue-50 to-violet-50 dark:from-blue-950/30 dark:to-violet-950/30 border border-blue-200 dark:border-blue-800 rounded-xl">
2280
+ <h3 class="font-semibold text-lg mb-2">\u{1F680} Ready to build?</h3>
2281
+ <p class="text-zinc-600 dark:text-zinc-400 mb-4">Start creating your first page by running:</p>
2282
+ <code class="bg-white dark:bg-zinc-900 px-4 py-2 rounded-lg border border-zinc-200 dark:border-zinc-700 font-mono text-sm">touch app/page.tsx</code>
2283
+ </div>
2284
+ </main>
2285
+ </div>
2286
+ ` + footer;
2287
+ }
2288
+ function generateLearnPage() {
2289
+ return baseStyles.replace("%TITLE%", "Learn") + header + `
2290
+ <main class="max-w-4xl mx-auto px-6 py-16">
2291
+ <div class="text-center mb-16">
2292
+ <h1 class="text-4xl sm:text-5xl font-bold mb-4">Learn Float.js</h1>
2293
+ <p class="text-lg text-zinc-600 dark:text-zinc-400 max-w-2xl mx-auto">
2294
+ Follow our step-by-step tutorial to master Float.js and build your first application
2295
+ </p>
2296
+ </div>
2297
+
2298
+ <!-- Tutorial Steps -->
2299
+ <div class="space-y-6">
2300
+
2301
+ <!-- Step 1 -->
2302
+ <div class="p-6 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl">
2303
+ <div class="flex items-start gap-4">
2304
+ <div class="w-10 h-10 bg-blue-100 dark:bg-blue-500/20 rounded-xl flex items-center justify-center flex-shrink-0">
2305
+ <span class="font-bold text-blue-600 dark:text-blue-400">1</span>
2306
+ </div>
2307
+ <div class="flex-1">
2308
+ <h3 class="font-semibold text-xl mb-2">Create Your Project</h3>
2309
+ <p class="text-zinc-600 dark:text-zinc-400 mb-4">Start by creating a new Float.js project using the CLI</p>
2310
+ <pre class="bg-zinc-900 text-zinc-100 p-4 rounded-xl text-sm font-mono overflow-x-auto"><code>npx create-float@latest my-first-app</code></pre>
2311
+ </div>
2312
+ </div>
2313
+ </div>
2314
+
2315
+ <!-- Step 2 -->
2316
+ <div class="p-6 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl">
2317
+ <div class="flex items-start gap-4">
2318
+ <div class="w-10 h-10 bg-violet-100 dark:bg-violet-500/20 rounded-xl flex items-center justify-center flex-shrink-0">
2319
+ <span class="font-bold text-violet-600 dark:text-violet-400">2</span>
2320
+ </div>
2321
+ <div class="flex-1">
2322
+ <h3 class="font-semibold text-xl mb-2">Start the Development Server</h3>
2323
+ <p class="text-zinc-600 dark:text-zinc-400 mb-4">Navigate to your project and start the dev server</p>
2324
+ <pre class="bg-zinc-900 text-zinc-100 p-4 rounded-xl text-sm font-mono overflow-x-auto"><code>cd my-first-app
2325
+ npm run dev</code></pre>
2326
+ </div>
2327
+ </div>
2328
+ </div>
2329
+
2330
+ <!-- Step 3 -->
2331
+ <div class="p-6 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl">
2332
+ <div class="flex items-start gap-4">
2333
+ <div class="w-10 h-10 bg-emerald-100 dark:bg-emerald-500/20 rounded-xl flex items-center justify-center flex-shrink-0">
2334
+ <span class="font-bold text-emerald-600 dark:text-emerald-400">3</span>
2335
+ </div>
2336
+ <div class="flex-1">
2337
+ <h3 class="font-semibold text-xl mb-2">Create Your First Page</h3>
2338
+ <p class="text-zinc-600 dark:text-zinc-400 mb-4">Create a page component in the app directory</p>
2339
+ <pre class="bg-zinc-900 text-zinc-100 p-4 rounded-xl text-sm font-mono overflow-x-auto"><code><span class="text-zinc-500">// app/page.tsx</span>
2340
+ <span class="text-violet-400">export default</span> <span class="text-blue-400">function</span> <span class="text-yellow-300">HomePage</span>() {
2341
+ <span class="text-violet-400">return</span> (
2342
+ <span class="text-zinc-500">&lt;</span><span class="text-emerald-400">main</span><span class="text-zinc-500">&gt;</span>
2343
+ <span class="text-zinc-500">&lt;</span><span class="text-emerald-400">h1</span><span class="text-zinc-500">&gt;</span>Hello, Float.js!<span class="text-zinc-500">&lt;/</span><span class="text-emerald-400">h1</span><span class="text-zinc-500">&gt;</span>
2344
+ <span class="text-zinc-500">&lt;</span><span class="text-emerald-400">p</span><span class="text-zinc-500">&gt;</span>Welcome to my first app<span class="text-zinc-500">&lt;/</span><span class="text-emerald-400">p</span><span class="text-zinc-500">&gt;</span>
2345
+ <span class="text-zinc-500">&lt;/</span><span class="text-emerald-400">main</span><span class="text-zinc-500">&gt;</span>
2346
+ );
2347
+ }</code></pre>
2348
+ </div>
2349
+ </div>
2350
+ </div>
2351
+
2352
+ <!-- Step 4 -->
2353
+ <div class="p-6 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl">
2354
+ <div class="flex items-start gap-4">
2355
+ <div class="w-10 h-10 bg-amber-100 dark:bg-amber-500/20 rounded-xl flex items-center justify-center flex-shrink-0">
2356
+ <span class="font-bold text-amber-600 dark:text-amber-400">4</span>
2357
+ </div>
2358
+ <div class="flex-1">
2359
+ <h3 class="font-semibold text-xl mb-2">Add an API Route</h3>
2360
+ <p class="text-zinc-600 dark:text-zinc-400 mb-4">Create your backend API with simple handlers</p>
2361
+ <pre class="bg-zinc-900 text-zinc-100 p-4 rounded-xl text-sm font-mono overflow-x-auto"><code><span class="text-zinc-500">// app/api/hello/route.ts</span>
2362
+ <span class="text-violet-400">export async function</span> <span class="text-yellow-300">GET</span>() {
2363
+ <span class="text-violet-400">return</span> Response.json({
2364
+ message: <span class="text-emerald-400">'Hello from the API!'</span>,
2365
+ timestamp: <span class="text-violet-400">new</span> Date().toISOString()
2366
+ });
2367
+ }</code></pre>
2368
+ </div>
2369
+ </div>
2370
+ </div>
2371
+
2372
+ <!-- Step 5 -->
2373
+ <div class="p-6 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl">
2374
+ <div class="flex items-start gap-4">
2375
+ <div class="w-10 h-10 bg-pink-100 dark:bg-pink-500/20 rounded-xl flex items-center justify-center flex-shrink-0">
2376
+ <span class="font-bold text-pink-600 dark:text-pink-400">5</span>
2377
+ </div>
2378
+ <div class="flex-1">
2379
+ <h3 class="font-semibold text-xl mb-2">Build for Production</h3>
2380
+ <p class="text-zinc-600 dark:text-zinc-400 mb-4">Ready to deploy? Build your application</p>
2381
+ <pre class="bg-zinc-900 text-zinc-100 p-4 rounded-xl text-sm font-mono overflow-x-auto"><code>npm run build
2382
+ npm start</code></pre>
2383
+ </div>
2384
+ </div>
2385
+ </div>
2386
+
2387
+ </div>
2388
+
2389
+ <!-- Next Steps -->
2390
+ <div class="mt-16 text-center">
2391
+ <h2 class="text-2xl font-bold mb-4">What's Next?</h2>
2392
+ <p class="text-zinc-600 dark:text-zinc-400 mb-8">Explore more features and capabilities</p>
2393
+ <div class="flex flex-wrap justify-center gap-4">
2394
+ <a href="/__docs" class="px-6 py-3 bg-zinc-900 dark:bg-white text-white dark:text-zinc-900 font-semibold rounded-xl hover:bg-zinc-800 dark:hover:bg-zinc-100 transition-colors">
2395
+ Read the Docs
2396
+ </a>
2397
+ <a href="/__examples" class="px-6 py-3 bg-zinc-100 dark:bg-zinc-800 text-zinc-900 dark:text-white font-semibold rounded-xl hover:bg-zinc-200 dark:hover:bg-zinc-700 transition-colors">
2398
+ View Examples
1917
2399
  </a>
1918
2400
  </div>
2401
+ </div>
2402
+ </main>
2403
+ ` + footer;
2404
+ }
2405
+ function generateExamplesPage() {
2406
+ return baseStyles.replace("%TITLE%", "Examples") + header + `
2407
+ <main class="max-w-6xl mx-auto px-6 py-16">
2408
+ <div class="text-center mb-16">
2409
+ <h1 class="text-4xl sm:text-5xl font-bold mb-4">Examples</h1>
2410
+ <p class="text-lg text-zinc-600 dark:text-zinc-400 max-w-2xl mx-auto">
2411
+ Explore example projects to learn common patterns and best practices
2412
+ </p>
2413
+ </div>
2414
+
2415
+ <!-- Examples Grid -->
2416
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
1919
2417
 
1920
- <!-- Right: Links -->
1921
- <div class="flex items-center gap-4">
1922
- <a href="https://floatjs.dev" target="_blank" class="text-sm text-zinc-500 hover:text-white transition-colors">Docs</a>
1923
- <a href="https://github.com/float-js/float-js" target="_blank" class="text-sm text-zinc-500 hover:text-white transition-colors">GitHub</a>
1924
- <a href="https://x.com/floatjs" target="_blank" class="text-sm text-zinc-500 hover:text-white transition-colors">Twitter</a>
2418
+ <!-- Basic App -->
2419
+ <div class="group p-6 bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl hover:border-blue-500 transition-all hover:shadow-lg">
2420
+ <div class="w-12 h-12 bg-blue-100 dark:bg-blue-500/20 rounded-xl flex items-center justify-center mb-4">
2421
+ <svg class="w-6 h-6 text-blue-600 dark:text-blue-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2422
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"/>
2423
+ </svg>
2424
+ </div>
2425
+ <h3 class="font-semibold text-lg mb-2">Basic App</h3>
2426
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">Simple starter with pages, layouts, and routing</p>
2427
+ <div class="flex flex-wrap gap-2">
2428
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">React</span>
2429
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">TypeScript</span>
2430
+ </div>
2431
+ </div>
2432
+
2433
+ <!-- Blog -->
2434
+ <div class="group p-6 bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl hover:border-violet-500 transition-all hover:shadow-lg">
2435
+ <div class="w-12 h-12 bg-violet-100 dark:bg-violet-500/20 rounded-xl flex items-center justify-center mb-4">
2436
+ <svg class="w-6 h-6 text-violet-600 dark:text-violet-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2437
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z"/>
2438
+ </svg>
2439
+ </div>
2440
+ <h3 class="font-semibold text-lg mb-2">Blog</h3>
2441
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">Full blog with MDX, dynamic routes, and SSG</p>
2442
+ <div class="flex flex-wrap gap-2">
2443
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">MDX</span>
2444
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">SSG</span>
2445
+ </div>
2446
+ </div>
2447
+
2448
+ <!-- API Backend -->
2449
+ <div class="group p-6 bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl hover:border-emerald-500 transition-all hover:shadow-lg">
2450
+ <div class="w-12 h-12 bg-emerald-100 dark:bg-emerald-500/20 rounded-xl flex items-center justify-center mb-4">
2451
+ <svg class="w-6 h-6 text-emerald-600 dark:text-emerald-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2452
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"/>
2453
+ </svg>
2454
+ </div>
2455
+ <h3 class="font-semibold text-lg mb-2">API Backend</h3>
2456
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">REST API with authentication and database</p>
2457
+ <div class="flex flex-wrap gap-2">
2458
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">API</span>
2459
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">Auth</span>
2460
+ </div>
2461
+ </div>
2462
+
2463
+ <!-- AI Chat -->
2464
+ <div class="group p-6 bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl hover:border-pink-500 transition-all hover:shadow-lg">
2465
+ <div class="w-12 h-12 bg-pink-100 dark:bg-pink-500/20 rounded-xl flex items-center justify-center mb-4">
2466
+ <svg class="w-6 h-6 text-pink-600 dark:text-pink-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2467
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"/>
2468
+ </svg>
2469
+ </div>
2470
+ <h3 class="font-semibold text-lg mb-2">AI Chat</h3>
2471
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">Streaming chat with OpenAI integration</p>
2472
+ <div class="flex flex-wrap gap-2">
2473
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">AI</span>
2474
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">Streaming</span>
2475
+ </div>
2476
+ </div>
2477
+
2478
+ <!-- E-commerce -->
2479
+ <div class="group p-6 bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl hover:border-amber-500 transition-all hover:shadow-lg">
2480
+ <div class="w-12 h-12 bg-amber-100 dark:bg-amber-500/20 rounded-xl flex items-center justify-center mb-4">
2481
+ <svg class="w-6 h-6 text-amber-600 dark:text-amber-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2482
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z"/>
2483
+ </svg>
2484
+ </div>
2485
+ <h3 class="font-semibold text-lg mb-2">E-commerce</h3>
2486
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">Store with cart, checkout, and payments</p>
2487
+ <div class="flex flex-wrap gap-2">
2488
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">Stripe</span>
2489
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">Cart</span>
2490
+ </div>
2491
+ </div>
2492
+
2493
+ <!-- Dashboard -->
2494
+ <div class="group p-6 bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl hover:border-cyan-500 transition-all hover:shadow-lg">
2495
+ <div class="w-12 h-12 bg-cyan-100 dark:bg-cyan-500/20 rounded-xl flex items-center justify-center mb-4">
2496
+ <svg class="w-6 h-6 text-cyan-600 dark:text-cyan-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2497
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"/>
2498
+ </svg>
2499
+ </div>
2500
+ <h3 class="font-semibold text-lg mb-2">Dashboard</h3>
2501
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">Admin panel with charts and real-time data</p>
2502
+ <div class="flex flex-wrap gap-2">
2503
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">Charts</span>
2504
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">Realtime</span>
2505
+ </div>
1925
2506
  </div>
1926
2507
 
1927
2508
  </div>
1928
- </footer>
1929
-
1930
- </body>
1931
- </html>`;
2509
+
2510
+ <!-- CTA -->
2511
+ <div class="mt-16 text-center p-8 bg-gradient-to-r from-blue-50 to-violet-50 dark:from-blue-950/30 dark:to-violet-950/30 border border-blue-200 dark:border-blue-800 rounded-2xl">
2512
+ <h2 class="text-2xl font-bold mb-4">Want to contribute?</h2>
2513
+ <p class="text-zinc-600 dark:text-zinc-400 mb-6">Share your example with the community</p>
2514
+ <a href="https://github.com/float-js/float-js" target="_blank" class="inline-flex items-center gap-2 px-6 py-3 bg-zinc-900 dark:bg-white text-white dark:text-zinc-900 font-semibold rounded-xl hover:bg-zinc-800 dark:hover:bg-zinc-100 transition-colors">
2515
+ <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"/></svg>
2516
+ View on GitHub
2517
+ </a>
2518
+ </div>
2519
+ </main>
2520
+ ` + footer;
1932
2521
  }
1933
2522
 
1934
2523
  // src/server/dev-server.ts
@@ -2046,6 +2635,21 @@ ${FLOAT_ERROR_OVERLAY}
2046
2635
  res.end(generateWelcomePage());
2047
2636
  return;
2048
2637
  }
2638
+ if (pathname === "/__docs") {
2639
+ res.writeHead(200, { "Content-Type": "text/html; charset=utf-8", "Cache-Control": "no-cache" });
2640
+ res.end(generateDocsPage());
2641
+ return;
2642
+ }
2643
+ if (pathname === "/__learn") {
2644
+ res.writeHead(200, { "Content-Type": "text/html; charset=utf-8", "Cache-Control": "no-cache" });
2645
+ res.end(generateLearnPage());
2646
+ return;
2647
+ }
2648
+ if (pathname === "/__examples") {
2649
+ res.writeHead(200, { "Content-Type": "text/html; charset=utf-8", "Cache-Control": "no-cache" });
2650
+ res.end(generateExamplesPage());
2651
+ return;
2652
+ }
2049
2653
  if (!route) {
2050
2654
  res.writeHead(404, { "Content-Type": "text/html" });
2051
2655
  res.end(create404Page(pathname));