@float.js/core 2.0.4 → 2.0.6

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.
@@ -1733,493 +1733,765 @@ var FLOAT_ERROR_OVERLAY = `
1733
1733
  init_esm_shims();
1734
1734
  function generateWelcomePage() {
1735
1735
  return `<!DOCTYPE html>
1736
- <html lang="en">
1736
+ <html lang="en" class="light">
1737
1737
  <head>
1738
1738
  <meta charset="UTF-8">
1739
1739
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
1740
1740
  <title>Welcome to Float.js</title>
1741
- <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><defs><linearGradient id='g' x1='0%25' y1='0%25' x2='100%25' y2='100%25'><stop offset='0%25' stop-color='%236366f1'/><stop offset='100%25' stop-color='%23d946ef'/></linearGradient></defs><circle cx='16' cy='16' r='14' fill='url(%23g)'/></svg>">
1742
- <style>
1743
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');
1744
-
1745
- * { margin: 0; padding: 0; box-sizing: border-box; }
1746
-
1747
- :root {
1748
- --float-purple: #8b5cf6;
1749
- --float-indigo: #6366f1;
1750
- --float-pink: #d946ef;
1751
- --float-cyan: #06b6d4;
1752
- }
1753
-
1754
- body {
1755
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
1756
- background: #0a0a0b;
1757
- color: white;
1758
- min-height: 100vh;
1759
- overflow-x: hidden;
1760
- }
1761
-
1762
- /* Animated background */
1763
- .bg-gradient {
1764
- position: fixed;
1765
- inset: 0;
1766
- background:
1767
- radial-gradient(ellipse 80% 50% at 50% -20%, rgba(99, 102, 241, 0.3), transparent),
1768
- radial-gradient(ellipse 60% 40% at 80% 60%, rgba(139, 92, 246, 0.15), transparent),
1769
- radial-gradient(ellipse 40% 30% at 20% 80%, rgba(217, 70, 239, 0.1), transparent);
1770
- pointer-events: none;
1771
- }
1772
-
1773
- .bg-grid {
1774
- position: fixed;
1775
- inset: 0;
1776
- background-image:
1777
- linear-gradient(rgba(255,255,255,0.02) 1px, transparent 1px),
1778
- linear-gradient(90deg, rgba(255,255,255,0.02) 1px, transparent 1px);
1779
- background-size: 60px 60px;
1780
- pointer-events: none;
1781
- }
1782
-
1783
- /* Floating orbs */
1784
- .orb {
1785
- position: fixed;
1786
- border-radius: 50%;
1787
- filter: blur(80px);
1788
- opacity: 0.5;
1789
- animation: float 20s ease-in-out infinite;
1790
- pointer-events: none;
1791
- }
1792
-
1793
- .orb-1 {
1794
- width: 400px;
1795
- height: 400px;
1796
- background: var(--float-purple);
1797
- top: -100px;
1798
- right: -100px;
1799
- animation-delay: 0s;
1800
- }
1801
-
1802
- .orb-2 {
1803
- width: 300px;
1804
- height: 300px;
1805
- background: var(--float-pink);
1806
- bottom: -50px;
1807
- left: -50px;
1808
- animation-delay: -7s;
1809
- }
1810
-
1811
- .orb-3 {
1812
- width: 200px;
1813
- height: 200px;
1814
- background: var(--float-cyan);
1815
- top: 50%;
1816
- left: 50%;
1817
- animation-delay: -14s;
1818
- }
1819
-
1820
- @keyframes float {
1821
- 0%, 100% { transform: translate(0, 0) scale(1); }
1822
- 25% { transform: translate(30px, -30px) scale(1.1); }
1823
- 50% { transform: translate(-20px, 20px) scale(0.9); }
1824
- 75% { transform: translate(20px, 10px) scale(1.05); }
1825
- }
1826
-
1827
- /* Main content */
1828
- .container {
1829
- position: relative;
1830
- max-width: 1200px;
1831
- margin: 0 auto;
1832
- padding: 60px 24px;
1833
- min-height: 100vh;
1834
- display: flex;
1835
- flex-direction: column;
1836
- align-items: center;
1837
- justify-content: center;
1838
- }
1839
-
1840
- /* Logo */
1841
- .logo {
1842
- margin-bottom: 48px;
1843
- animation: fadeInUp 0.8s ease-out;
1844
- }
1845
-
1846
- .logo svg {
1847
- width: 80px;
1848
- height: 80px;
1849
- filter: drop-shadow(0 0 40px rgba(139, 92, 246, 0.5));
1850
- }
1851
-
1852
- /* Hero */
1853
- .hero {
1854
- text-align: center;
1855
- margin-bottom: 64px;
1856
- }
1857
-
1858
- .hero h1 {
1859
- font-size: clamp(48px, 10vw, 80px);
1860
- font-weight: 800;
1861
- letter-spacing: -0.03em;
1862
- line-height: 1.1;
1863
- margin-bottom: 24px;
1864
- animation: fadeInUp 0.8s ease-out 0.1s both;
1865
- }
1866
-
1867
- .hero h1 .gradient {
1868
- background: linear-gradient(135deg, var(--float-indigo), var(--float-purple), var(--float-pink));
1869
- -webkit-background-clip: text;
1870
- -webkit-text-fill-color: transparent;
1871
- background-clip: text;
1872
- }
1873
-
1874
- .hero p {
1875
- font-size: 20px;
1876
- color: rgba(255,255,255,0.6);
1877
- max-width: 600px;
1878
- margin: 0 auto;
1879
- line-height: 1.7;
1880
- animation: fadeInUp 0.8s ease-out 0.2s both;
1881
- }
1882
-
1883
- /* Features */
1884
- .features {
1885
- display: grid;
1886
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
1887
- gap: 20px;
1888
- width: 100%;
1889
- max-width: 900px;
1890
- margin-bottom: 64px;
1891
- }
1892
-
1893
- .feature {
1894
- background: rgba(255,255,255,0.03);
1895
- border: 1px solid rgba(255,255,255,0.06);
1896
- border-radius: 20px;
1897
- padding: 28px;
1898
- transition: all 0.3s ease;
1899
- animation: fadeInUp 0.8s ease-out both;
1900
- }
1901
-
1902
- .feature:nth-child(1) { animation-delay: 0.3s; }
1903
- .feature:nth-child(2) { animation-delay: 0.4s; }
1904
- .feature:nth-child(3) { animation-delay: 0.5s; }
1905
-
1906
- .feature:hover {
1907
- background: rgba(255,255,255,0.05);
1908
- border-color: rgba(139, 92, 246, 0.3);
1909
- transform: translateY(-4px);
1910
- }
1911
-
1912
- .feature-icon {
1913
- width: 48px;
1914
- height: 48px;
1915
- background: linear-gradient(135deg, rgba(99, 102, 241, 0.2), rgba(139, 92, 246, 0.2));
1916
- border-radius: 14px;
1917
- display: flex;
1918
- align-items: center;
1919
- justify-content: center;
1920
- margin-bottom: 16px;
1921
- font-size: 24px;
1922
- }
1923
-
1924
- .feature h3 {
1925
- font-size: 18px;
1926
- font-weight: 600;
1927
- margin-bottom: 8px;
1928
- }
1929
-
1930
- .feature p {
1931
- font-size: 14px;
1932
- color: rgba(255,255,255,0.5);
1933
- line-height: 1.6;
1934
- }
1935
-
1936
- /* Code block */
1937
- .code-section {
1938
- width: 100%;
1939
- max-width: 600px;
1940
- animation: fadeInUp 0.8s ease-out 0.6s both;
1941
- margin-bottom: 48px;
1942
- }
1943
-
1944
- .code-header {
1945
- background: rgba(255,255,255,0.05);
1946
- border: 1px solid rgba(255,255,255,0.08);
1947
- border-bottom: none;
1948
- border-radius: 16px 16px 0 0;
1949
- padding: 14px 20px;
1950
- display: flex;
1951
- align-items: center;
1952
- gap: 8px;
1953
- }
1954
-
1955
- .code-dots {
1956
- display: flex;
1957
- gap: 6px;
1958
- }
1959
-
1960
- .code-dot {
1961
- width: 12px;
1962
- height: 12px;
1963
- border-radius: 50%;
1964
- background: rgba(255,255,255,0.1);
1965
- }
1966
-
1967
- .code-dot:nth-child(1) { background: #ff5f57; }
1968
- .code-dot:nth-child(2) { background: #febc2e; }
1969
- .code-dot:nth-child(3) { background: #28c840; }
1970
-
1971
- .code-title {
1972
- margin-left: auto;
1973
- font-size: 12px;
1974
- color: rgba(255,255,255,0.4);
1975
- }
1976
-
1977
- .code-block {
1978
- background: rgba(0,0,0,0.4);
1979
- border: 1px solid rgba(255,255,255,0.08);
1980
- border-radius: 0 0 16px 16px;
1981
- padding: 24px;
1982
- font-family: 'Monaco', 'Menlo', monospace;
1983
- font-size: 14px;
1984
- line-height: 1.8;
1985
- overflow-x: auto;
1986
- }
1987
-
1988
- .code-line {
1989
- display: flex;
1990
- }
1991
-
1992
- .code-number {
1993
- color: rgba(255,255,255,0.2);
1994
- width: 40px;
1995
- flex-shrink: 0;
1996
- user-select: none;
1997
- }
1998
-
1999
- .code-content {
2000
- color: rgba(255,255,255,0.8);
2001
- }
2002
-
2003
- .code-keyword { color: #c792ea; }
2004
- .code-string { color: #c3e88d; }
2005
- .code-function { color: #82aaff; }
2006
- .code-comment { color: rgba(255,255,255,0.3); }
2007
- .code-tag { color: #f07178; }
2008
- .code-attr { color: #ffcb6b; }
2009
-
2010
- /* Quick start */
2011
- .quick-start {
2012
- text-align: center;
2013
- animation: fadeInUp 0.8s ease-out 0.7s both;
2014
- }
2015
-
2016
- .quick-start h2 {
2017
- font-size: 14px;
2018
- font-weight: 500;
2019
- color: rgba(255,255,255,0.4);
2020
- text-transform: uppercase;
2021
- letter-spacing: 0.1em;
2022
- margin-bottom: 20px;
2023
- }
2024
-
2025
- .quick-start-cmd {
2026
- display: inline-flex;
2027
- align-items: center;
2028
- gap: 12px;
2029
- background: rgba(255,255,255,0.05);
2030
- border: 1px solid rgba(255,255,255,0.1);
2031
- border-radius: 12px;
2032
- padding: 16px 24px;
2033
- font-family: 'Monaco', 'Menlo', monospace;
2034
- font-size: 15px;
2035
- cursor: pointer;
2036
- transition: all 0.2s;
2037
- }
2038
-
2039
- .quick-start-cmd:hover {
2040
- background: rgba(255,255,255,0.08);
2041
- border-color: rgba(139, 92, 246, 0.4);
2042
- }
2043
-
2044
- .quick-start-cmd .prompt {
2045
- color: var(--float-purple);
2046
- }
2047
-
2048
- .quick-start-cmd .text {
2049
- color: rgba(255,255,255,0.8);
2050
- }
2051
-
2052
- .quick-start-cmd .copy {
2053
- opacity: 0.4;
2054
- transition: opacity 0.2s;
2055
- }
2056
-
2057
- .quick-start-cmd:hover .copy {
2058
- opacity: 0.8;
2059
- }
2060
-
2061
- /* Links */
2062
- .links {
2063
- display: flex;
2064
- gap: 24px;
2065
- margin-top: 48px;
2066
- animation: fadeInUp 0.8s ease-out 0.8s both;
2067
- }
2068
-
2069
- .link {
2070
- color: rgba(255,255,255,0.5);
2071
- text-decoration: none;
2072
- font-size: 14px;
2073
- display: flex;
2074
- align-items: center;
2075
- gap: 6px;
2076
- transition: color 0.2s;
2077
- }
2078
-
2079
- .link:hover {
2080
- color: var(--float-purple);
2081
- }
2082
-
2083
- /* Footer */
2084
- .footer {
2085
- position: absolute;
2086
- bottom: 24px;
2087
- font-size: 12px;
2088
- color: rgba(255,255,255,0.3);
2089
- animation: fadeInUp 0.8s ease-out 0.9s both;
1741
+ <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>">
1742
+ <script src="https://cdn.tailwindcss.com"></script>
1743
+ <script>
1744
+ tailwind.config = {
1745
+ darkMode: 'class',
1746
+ theme: {
1747
+ extend: {
1748
+ fontFamily: { sans: ['Inter', 'system-ui', 'sans-serif'] }
1749
+ }
1750
+ }
2090
1751
  }
1752
+ </script>
1753
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
1754
+ <style>
1755
+ @keyframes fade-up { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
1756
+ @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-8px); } }
1757
+ .fade-up { animation: fade-up 0.6s ease-out forwards; }
1758
+ .fade-up-1 { animation: fade-up 0.6s ease-out 0.1s forwards; opacity: 0; }
1759
+ .fade-up-2 { animation: fade-up 0.6s ease-out 0.2s forwards; opacity: 0; }
1760
+ .fade-up-3 { animation: fade-up 0.6s ease-out 0.3s forwards; opacity: 0; }
1761
+ .fade-up-4 { animation: fade-up 0.6s ease-out 0.4s forwards; opacity: 0; }
1762
+ .logo-float { animation: float 4s ease-in-out infinite; }
1763
+ </style>
1764
+ </head>
1765
+ <body class="bg-white dark:bg-zinc-950 text-zinc-900 dark:text-white min-h-screen font-sans transition-colors duration-300">
1766
+
1767
+ <!-- Header -->
1768
+ <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">
1769
+ <div class="max-w-6xl mx-auto px-6 h-16 flex items-center justify-between">
1770
+ <!-- Logo -->
1771
+ <div class="flex items-center gap-3">
1772
+ <svg class="w-8 h-8" viewBox="0 0 200 200" fill="none">
1773
+ <defs>
1774
+ <linearGradient id="hdr-grad" x1="50" y1="160" x2="170" y2="40" gradientUnits="userSpaceOnUse">
1775
+ <stop stop-color="#3B82F6"/><stop offset="1" stop-color="#8B5CF6"/>
1776
+ </linearGradient>
1777
+ </defs>
1778
+ <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)"/>
1779
+ <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)"/>
1780
+ <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)"/>
1781
+ </svg>
1782
+ <span class="font-semibold text-lg">Float.js</span>
1783
+ <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>
1784
+ </div>
1785
+
1786
+ <!-- Nav -->
1787
+ <nav class="hidden sm:flex items-center gap-6">
1788
+ <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>
1789
+ <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>
1790
+ <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>
1791
+ <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>
1792
+ </nav>
1793
+
1794
+ <!-- Dark Mode Toggle -->
1795
+ <button id="theme-toggle" class="p-2 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors" title="Toggle theme">
1796
+ <svg class="w-5 h-5 hidden dark:block" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1797
+ <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"/>
1798
+ </svg>
1799
+ <svg class="w-5 h-5 block dark:hidden" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1800
+ <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"/>
1801
+ </svg>
1802
+ </button>
1803
+ </div>
1804
+ </header>
1805
+
1806
+ <!-- Hero Section -->
1807
+ <main class="pt-32 pb-20 px-6">
1808
+ <div class="max-w-4xl mx-auto text-center">
1809
+
1810
+ <!-- Logo -->
1811
+ <div class="fade-up logo-float mb-8">
1812
+ <svg class="w-24 h-24 mx-auto" viewBox="0 0 200 200" fill="none">
1813
+ <defs>
1814
+ <linearGradient id="hero-grad" x1="50" y1="160" x2="170" y2="40" gradientUnits="userSpaceOnUse">
1815
+ <stop stop-color="#3B82F6"/><stop offset="1" stop-color="#8B5CF6"/>
1816
+ </linearGradient>
1817
+ </defs>
1818
+ <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)"/>
1819
+ <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)"/>
1820
+ <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)"/>
1821
+ </svg>
1822
+ </div>
1823
+
1824
+ <!-- Title -->
1825
+ <h1 class="fade-up-1 text-4xl sm:text-6xl font-bold tracking-tight mb-6">
1826
+ The React Framework<br/>
1827
+ <span class="bg-gradient-to-r from-blue-500 to-violet-500 bg-clip-text text-transparent">for the Modern Web</span>
1828
+ </h1>
1829
+
1830
+ <!-- Subtitle -->
1831
+ <p class="fade-up-2 text-lg sm:text-xl text-zinc-600 dark:text-zinc-400 max-w-2xl mx-auto mb-10">
1832
+ Build full-stack React applications with file-based routing, SSR, API routes,
1833
+ and lightning-fast HMR. Get started by creating your first page.
1834
+ </p>
1835
+
1836
+ <!-- CTA Buttons -->
1837
+ <div class="fade-up-3 flex flex-col sm:flex-row gap-4 justify-center mb-16">
1838
+ <a href="/__learn"
1839
+ 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">
1840
+ Get Started
1841
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1842
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"/>
1843
+ </svg>
1844
+ </a>
1845
+ <a href="/__docs"
1846
+ 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">
1847
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1848
+ <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"/>
1849
+ </svg>
1850
+ Documentation
1851
+ </a>
1852
+ </div>
1853
+
1854
+ <!-- Code Block -->
1855
+ <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">
1856
+ <div class="flex items-center gap-2 mb-4">
1857
+ <div class="w-3 h-3 rounded-full bg-red-400"></div>
1858
+ <div class="w-3 h-3 rounded-full bg-yellow-400"></div>
1859
+ <div class="w-3 h-3 rounded-full bg-green-400"></div>
1860
+ <span class="ml-3 text-xs text-zinc-500 font-mono">app/page.tsx</span>
1861
+ </div>
1862
+ <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>() {
1863
+ <span class="text-violet-600 dark:text-violet-400">return</span> (
1864
+ <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>
1865
+ );
1866
+ }</code></pre>
1867
+ </div>
1868
+
1869
+ </div>
1870
+ </main>
1871
+
1872
+ <!-- Features Section -->
1873
+ <section class="py-20 px-6 bg-zinc-50 dark:bg-zinc-900/50">
1874
+ <div class="max-w-6xl mx-auto">
1875
+ <h2 class="text-2xl sm:text-3xl font-bold text-center mb-4">Built for Performance</h2>
1876
+ <p class="text-zinc-600 dark:text-zinc-400 text-center mb-12 max-w-xl mx-auto">
1877
+ Everything you need to build fast, modern web applications
1878
+ </p>
1879
+
1880
+ <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
1881
+
1882
+ <!-- Feature 1 -->
1883
+ <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">
1884
+ <div class="w-12 h-12 bg-blue-100 dark:bg-blue-500/20 rounded-xl flex items-center justify-center mb-4">
1885
+ <svg class="w-6 h-6 text-blue-600 dark:text-blue-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1886
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"/>
1887
+ </svg>
1888
+ </div>
1889
+ <h3 class="font-semibold text-lg mb-2">Lightning Fast HMR</h3>
1890
+ <p class="text-sm text-zinc-600 dark:text-zinc-400">Instant hot module replacement. See your changes in milliseconds without losing state.</p>
1891
+ </div>
1892
+
1893
+ <!-- Feature 2 -->
1894
+ <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">
1895
+ <div class="w-12 h-12 bg-violet-100 dark:bg-violet-500/20 rounded-xl flex items-center justify-center mb-4">
1896
+ <svg class="w-6 h-6 text-violet-600 dark:text-violet-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1897
+ <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"/>
1898
+ </svg>
1899
+ </div>
1900
+ <h3 class="font-semibold text-lg mb-2">File-Based Routing</h3>
1901
+ <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>
1902
+ </div>
1903
+
1904
+ <!-- Feature 3 -->
1905
+ <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">
1906
+ <div class="w-12 h-12 bg-emerald-100 dark:bg-emerald-500/20 rounded-xl flex items-center justify-center mb-4">
1907
+ <svg class="w-6 h-6 text-emerald-600 dark:text-emerald-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1908
+ <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"/>
1909
+ </svg>
1910
+ </div>
1911
+ <h3 class="font-semibold text-lg mb-2">Server-Side Rendering</h3>
1912
+ <p class="text-sm text-zinc-600 dark:text-zinc-400">Automatic SSR for optimal SEO and performance. Hybrid rendering strategies.</p>
1913
+ </div>
1914
+
1915
+ <!-- Feature 4 -->
1916
+ <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">
1917
+ <div class="w-12 h-12 bg-amber-100 dark:bg-amber-500/20 rounded-xl flex items-center justify-center mb-4">
1918
+ <svg class="w-6 h-6 text-amber-600 dark:text-amber-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1919
+ <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"/>
1920
+ </svg>
1921
+ </div>
1922
+ <h3 class="font-semibold text-lg mb-2">API Routes</h3>
1923
+ <p class="text-sm text-zinc-600 dark:text-zinc-400">Build your backend API with simple route handlers. Full TypeScript support.</p>
1924
+ </div>
1925
+
1926
+ <!-- Feature 5 -->
1927
+ <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">
1928
+ <div class="w-12 h-12 bg-pink-100 dark:bg-pink-500/20 rounded-xl flex items-center justify-center mb-4">
1929
+ <svg class="w-6 h-6 text-pink-600 dark:text-pink-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1930
+ <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"/>
1931
+ </svg>
1932
+ </div>
1933
+ <h3 class="font-semibold text-lg mb-2">Built-in AI Integration</h3>
1934
+ <p class="text-sm text-zinc-600 dark:text-zinc-400">First-class support for AI streaming, OpenAI, Anthropic, and more.</p>
1935
+ </div>
1936
+
1937
+ <!-- Feature 6 -->
1938
+ <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">
1939
+ <div class="w-12 h-12 bg-cyan-100 dark:bg-cyan-500/20 rounded-xl flex items-center justify-center mb-4">
1940
+ <svg class="w-6 h-6 text-cyan-600 dark:text-cyan-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1941
+ <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"/>
1942
+ </svg>
1943
+ </div>
1944
+ <h3 class="font-semibold text-lg mb-2">Developer Experience</h3>
1945
+ <p class="text-sm text-zinc-600 dark:text-zinc-400">Error overlay, DevTools, and debugging utilities built-in for a smooth workflow.</p>
1946
+ </div>
1947
+
1948
+ </div>
1949
+ </div>
1950
+ </section>
1951
+
1952
+ <!-- Quick Start Section -->
1953
+ <section class="py-20 px-6">
1954
+ <div class="max-w-4xl mx-auto">
1955
+ <h2 class="text-2xl sm:text-3xl font-bold text-center mb-4">Get Started in Seconds</h2>
1956
+ <p class="text-zinc-600 dark:text-zinc-400 text-center mb-12">Create your first page and see it live</p>
1957
+
1958
+ <div class="grid grid-cols-1 sm:grid-cols-3 gap-4">
1959
+ <div class="p-5 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl">
1960
+ <div class="text-xs text-zinc-500 mb-2 uppercase tracking-wider">1. Create page</div>
1961
+ <code class="text-sm font-mono text-zinc-700 dark:text-zinc-300">touch app/page.tsx</code>
1962
+ </div>
1963
+ <div class="p-5 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl">
1964
+ <div class="text-xs text-zinc-500 mb-2 uppercase tracking-wider">2. Add route</div>
1965
+ <code class="text-sm font-mono text-zinc-700 dark:text-zinc-300">mkdir app/about</code>
1966
+ </div>
1967
+ <div class="p-5 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl">
1968
+ <div class="text-xs text-zinc-500 mb-2 uppercase tracking-wider">3. API route</div>
1969
+ <code class="text-sm font-mono text-zinc-700 dark:text-zinc-300">touch app/api/route.ts</code>
1970
+ </div>
1971
+ </div>
1972
+ </div>
1973
+ </section>
1974
+
1975
+ <!-- Footer -->
1976
+ <footer class="border-t border-zinc-200 dark:border-zinc-800 py-12 px-6 bg-zinc-50 dark:bg-zinc-900/50">
1977
+ <div class="max-w-6xl mx-auto">
1978
+ <div class="grid grid-cols-1 sm:grid-cols-4 gap-8 mb-12">
1979
+
1980
+ <!-- Brand -->
1981
+ <div class="sm:col-span-1">
1982
+ <div class="flex items-center gap-2 mb-4">
1983
+ <svg class="w-8 h-8" viewBox="0 0 200 200" fill="none">
1984
+ <defs>
1985
+ <linearGradient id="ftr-grad" x1="50" y1="160" x2="170" y2="40" gradientUnits="userSpaceOnUse">
1986
+ <stop stop-color="#3B82F6"/><stop offset="1" stop-color="#8B5CF6"/>
1987
+ </linearGradient>
1988
+ </defs>
1989
+ <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)"/>
1990
+ <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)"/>
1991
+ <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)"/>
1992
+ </svg>
1993
+ <span class="font-semibold text-lg">Float.js</span>
1994
+ </div>
1995
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">
1996
+ The React framework for the modern web.
1997
+ </p>
1998
+ </div>
1999
+
2000
+ <!-- Resources -->
2001
+ <div>
2002
+ <h4 class="font-semibold mb-4 text-sm">Resources</h4>
2003
+ <ul class="space-y-2">
2004
+ <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>
2005
+ <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>
2006
+ <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>
2007
+ <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>
2008
+ </ul>
2009
+ </div>
2010
+
2011
+ <!-- More -->
2012
+ <div>
2013
+ <h4 class="font-semibold mb-4 text-sm">More</h4>
2014
+ <ul class="space-y-2">
2015
+ <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>
2016
+ <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>
2017
+ <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>
2018
+ </ul>
2019
+ </div>
2020
+
2021
+ <!-- Legal -->
2022
+ <div>
2023
+ <h4 class="font-semibold mb-4 text-sm">Legal</h4>
2024
+ <ul class="space-y-2">
2025
+ <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>
2026
+ <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>
2027
+ </ul>
2028
+ </div>
2029
+
2030
+ </div>
2031
+
2032
+ <!-- Bottom -->
2033
+ <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">
2034
+ <p class="text-sm text-zinc-500">
2035
+ \xA9 2024-2026 Float.js. Created by <span class="text-zinc-700 dark:text-zinc-300 font-medium">Peter Fulle</span>
2036
+ </p>
2037
+ <div class="flex items-center gap-4">
2038
+ <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>
2039
+ <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">
2040
+ <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>
2041
+ </a>
2042
+ <a href="https://x.com/floatjs" target="_blank" class="text-zinc-500 hover:text-zinc-900 dark:hover:text-white transition-colors">
2043
+ <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>
2044
+ </a>
2045
+ </div>
2046
+ </div>
2047
+ </div>
2048
+ </footer>
2049
+
2050
+ <!-- Theme Toggle Script -->
2051
+ <script>
2052
+ const toggle = document.getElementById('theme-toggle');
2053
+ const html = document.documentElement;
2091
2054
 
2092
- @keyframes fadeInUp {
2093
- from {
2094
- opacity: 0;
2095
- transform: translateY(20px);
2096
- }
2097
- to {
2098
- opacity: 1;
2099
- transform: translateY(0);
2100
- }
2055
+ // Check for saved theme or system preference
2056
+ if (localStorage.theme === 'dark' || (!localStorage.theme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
2057
+ html.classList.add('dark');
2058
+ html.classList.remove('light');
2101
2059
  }
2102
2060
 
2103
- /* Responsive */
2104
- @media (max-width: 640px) {
2105
- .container { padding: 40px 20px; }
2106
- .hero h1 { font-size: 40px; }
2107
- .hero p { font-size: 16px; }
2108
- .features { gap: 16px; }
2109
- .feature { padding: 20px; }
2061
+ toggle.addEventListener('click', () => {
2062
+ html.classList.toggle('dark');
2063
+ html.classList.toggle('light');
2064
+ localStorage.theme = html.classList.contains('dark') ? 'dark' : 'light';
2065
+ });
2066
+ </script>
2067
+
2068
+ </body>
2069
+ </html>`;
2070
+ }
2071
+
2072
+ // src/client/docs-pages.ts
2073
+ init_esm_shims();
2074
+ var baseStyles = `
2075
+ <!DOCTYPE html>
2076
+ <html lang="en" class="light">
2077
+ <head>
2078
+ <meta charset="UTF-8">
2079
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
2080
+ <title>%TITLE% - Float.js</title>
2081
+ <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>">
2082
+ <script src="https://cdn.tailwindcss.com"></script>
2083
+ <script>
2084
+ tailwind.config = {
2085
+ darkMode: 'class',
2086
+ theme: { extend: { fontFamily: { sans: ['Inter', 'system-ui', 'sans-serif'] } } }
2110
2087
  }
2088
+ </script>
2089
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
2090
+ <style>
2091
+ .prose code { background: #f4f4f5; padding: 2px 6px; border-radius: 4px; font-size: 0.875em; }
2092
+ .dark .prose code { background: #27272a; }
2093
+ .prose pre { background: #18181b; padding: 1rem; border-radius: 0.75rem; overflow-x: auto; }
2094
+ .prose pre code { background: transparent; padding: 0; }
2111
2095
  </style>
2112
2096
  </head>
2113
- <body>
2114
- <div class="bg-gradient"></div>
2115
- <div class="bg-grid"></div>
2116
- <div class="orb orb-1"></div>
2117
- <div class="orb orb-2"></div>
2118
- <div class="orb orb-3"></div>
2119
-
2120
- <div class="container">
2121
- <div class="logo">
2122
- <svg viewBox="0 0 80 80" fill="none">
2123
- <defs>
2124
- <linearGradient id="logoGrad" x1="0%" y1="0%" x2="100%" y2="100%">
2125
- <stop offset="0%" stop-color="#6366f1"/>
2126
- <stop offset="50%" stop-color="#8b5cf6"/>
2127
- <stop offset="100%" stop-color="#d946ef"/>
2128
- </linearGradient>
2129
- </defs>
2130
- <circle cx="40" cy="40" r="36" stroke="url(#logoGrad)" stroke-width="3" fill="none">
2131
- <animateTransform attributeName="transform" type="rotate" from="0 40 40" to="360 40 40" dur="20s" repeatCount="indefinite"/>
2132
- </circle>
2133
- <circle cx="40" cy="40" r="28" stroke="url(#logoGrad)" stroke-width="2" fill="none" opacity="0.5">
2134
- <animateTransform attributeName="transform" type="rotate" from="360 40 40" to="0 40 40" dur="15s" repeatCount="indefinite"/>
2135
- </circle>
2136
- <path d="M30 28 L54 40 L30 52 Z" fill="url(#logoGrad)"/>
2137
- </svg>
2097
+ <body class="bg-white dark:bg-zinc-950 text-zinc-900 dark:text-white min-h-screen font-sans">
2098
+ `;
2099
+ var header = `
2100
+ <!-- Header -->
2101
+ <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">
2102
+ <div class="max-w-6xl mx-auto px-6 h-16 flex items-center justify-between">
2103
+ <a href="/" class="flex items-center gap-3">
2104
+ <svg class="w-8 h-8" viewBox="0 0 200 200" fill="none">
2105
+ <defs>
2106
+ <linearGradient id="hdr-grad" x1="50" y1="160" x2="170" y2="40" gradientUnits="userSpaceOnUse">
2107
+ <stop stop-color="#3B82F6"/><stop offset="1" stop-color="#8B5CF6"/>
2108
+ </linearGradient>
2109
+ </defs>
2110
+ <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)"/>
2111
+ <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)"/>
2112
+ <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)"/>
2113
+ </svg>
2114
+ <span class="font-semibold text-lg">Float.js</span>
2115
+ </a>
2116
+ <nav class="flex items-center gap-6">
2117
+ <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>
2118
+ <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>
2119
+ <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>
2120
+ <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>
2121
+ <button id="theme-toggle" class="p-2 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors">
2122
+ <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>
2123
+ <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>
2124
+ </button>
2125
+ </nav>
2138
2126
  </div>
2139
-
2140
- <div class="hero">
2141
- <h1>Welcome to <span class="gradient">Float.js</span></h1>
2142
- <p>Tu framework ultramoderno est\xE1 listo. Comienza a crear experiencias web incre\xEDbles con SSR, routing inteligente y desarrollo instant\xE1neo.</p>
2127
+ </header>
2128
+ `;
2129
+ var footer = `
2130
+ <!-- Footer -->
2131
+ <footer class="border-t border-zinc-200 dark:border-zinc-800 py-8 px-6 bg-zinc-50 dark:bg-zinc-900/50">
2132
+ <div class="max-w-6xl mx-auto flex flex-col sm:flex-row items-center justify-between gap-4">
2133
+ <p class="text-sm text-zinc-500">\xA9 2024-2026 Float.js. Created by Peter Fulle</p>
2134
+ <div class="flex items-center gap-4">
2135
+ <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>
2136
+ <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">
2137
+ <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>
2138
+ </a>
2139
+ </div>
2143
2140
  </div>
2141
+ </footer>
2142
+ <script>
2143
+ const toggle = document.getElementById('theme-toggle');
2144
+ const html = document.documentElement;
2145
+ if (localStorage.theme === 'dark' || (!localStorage.theme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
2146
+ html.classList.add('dark'); html.classList.remove('light');
2147
+ }
2148
+ toggle?.addEventListener('click', () => {
2149
+ html.classList.toggle('dark'); html.classList.toggle('light');
2150
+ localStorage.theme = html.classList.contains('dark') ? 'dark' : 'light';
2151
+ });
2152
+ </script>
2153
+ </body>
2154
+ </html>
2155
+ `;
2156
+ function generateDocsPage() {
2157
+ return baseStyles.replace("%TITLE%", "Documentation") + header + `
2158
+ <div class="flex">
2159
+ <!-- Sidebar -->
2160
+ <aside class="hidden lg:block w-64 border-r border-zinc-200 dark:border-zinc-800 min-h-[calc(100vh-4rem)] p-6">
2161
+ <nav class="space-y-6">
2162
+ <div>
2163
+ <h3 class="font-semibold text-sm mb-3">Getting Started</h3>
2164
+ <ul class="space-y-2">
2165
+ <li><a href="#installation" class="text-sm text-blue-600 dark:text-blue-400 font-medium">Installation</a></li>
2166
+ <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>
2167
+ <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>
2168
+ </ul>
2169
+ </div>
2170
+ <div>
2171
+ <h3 class="font-semibold text-sm mb-3">Core Concepts</h3>
2172
+ <ul class="space-y-2">
2173
+ <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>
2174
+ <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>
2175
+ <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>
2176
+ </ul>
2177
+ </div>
2178
+ <div>
2179
+ <h3 class="font-semibold text-sm mb-3">Features</h3>
2180
+ <ul class="space-y-2">
2181
+ <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>
2182
+ <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>
2183
+ <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>
2184
+ </ul>
2185
+ </div>
2186
+ </nav>
2187
+ </aside>
2144
2188
 
2145
- <div class="features">
2146
- <div class="feature">
2147
- <div class="feature-icon">\u26A1</div>
2148
- <h3>Desarrollo Instant\xE1neo</h3>
2149
- <p>Hot reload ultrarr\xE1pido con esbuild. Ve tus cambios al instante sin perder el estado.</p>
2150
- </div>
2151
- <div class="feature">
2152
- <div class="feature-icon">\u{1F3AF}</div>
2153
- <h3>Routing Inteligente</h3>
2154
- <p>Sistema de rutas basado en archivos. Crea page.tsx y tu ruta est\xE1 lista autom\xE1ticamente.</p>
2189
+ <!-- Main Content -->
2190
+ <main class="flex-1 max-w-3xl mx-auto px-6 py-12 prose dark:prose-invert">
2191
+ <h1 id="installation" class="text-4xl font-bold mb-4">Documentation</h1>
2192
+ <p class="text-lg text-zinc-600 dark:text-zinc-400 mb-8">Learn how to build modern web applications with Float.js</p>
2193
+
2194
+ <h2 class="text-2xl font-semibold mt-12 mb-4">Installation</h2>
2195
+ <p class="mb-4">Create a new Float.js project with a single command:</p>
2196
+ <pre class="bg-zinc-900 text-zinc-100 p-4 rounded-xl mb-6"><code class="font-mono">npx create-float@latest my-app
2197
+ cd my-app
2198
+ npm run dev</code></pre>
2199
+
2200
+ <h2 id="project-structure" class="text-2xl font-semibold mt-12 mb-4">Project Structure</h2>
2201
+ <p class="mb-4">Float.js uses a file-based routing system. Your project structure looks like this:</p>
2202
+ <pre class="bg-zinc-900 text-zinc-100 p-4 rounded-xl mb-6"><code class="font-mono">my-app/
2203
+ \u251C\u2500\u2500 app/
2204
+ \u2502 \u251C\u2500\u2500 page.tsx # Home page (/)
2205
+ \u2502 \u251C\u2500\u2500 layout.tsx # Root layout
2206
+ \u2502 \u251C\u2500\u2500 about/
2207
+ \u2502 \u2502 \u2514\u2500\u2500 page.tsx # About page (/about)
2208
+ \u2502 \u2514\u2500\u2500 api/
2209
+ \u2502 \u2514\u2500\u2500 route.ts # API route (/api)
2210
+ \u251C\u2500\u2500 public/ # Static assets
2211
+ \u2514\u2500\u2500 package.json</code></pre>
2212
+
2213
+ <h2 id="routing" class="text-2xl font-semibold mt-12 mb-4">Routing</h2>
2214
+ <p class="mb-4">Routes are automatically generated based on your file structure:</p>
2215
+ <div class="bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-xl p-6 mb-6">
2216
+ <table class="w-full text-sm">
2217
+ <thead>
2218
+ <tr class="text-left border-b border-zinc-200 dark:border-zinc-700">
2219
+ <th class="pb-3 font-semibold">File</th>
2220
+ <th class="pb-3 font-semibold">Route</th>
2221
+ </tr>
2222
+ </thead>
2223
+ <tbody class="font-mono">
2224
+ <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>
2225
+ <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>
2226
+ <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>
2227
+ <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>
2228
+ </tbody>
2229
+ </table>
2155
2230
  </div>
2156
- <div class="feature">
2157
- <div class="feature-icon">\u{1F30A}</div>
2158
- <h3>SSR Streaming</h3>
2159
- <p>Renderizado del lado del servidor con React 18 y soporte para streaming nativo.</p>
2231
+
2232
+ <h2 id="pages" class="text-2xl font-semibold mt-12 mb-4">Creating Pages</h2>
2233
+ <p class="mb-4">Each page exports a default React component:</p>
2234
+ <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>() {
2235
+ <span class="text-violet-400">return</span> (
2236
+ <span class="text-zinc-500">&lt;</span><span class="text-emerald-400">div</span><span class="text-zinc-500">&gt;</span>
2237
+ <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>
2238
+ <span class="text-zinc-500">&lt;/</span><span class="text-emerald-400">div</span><span class="text-zinc-500">&gt;</span>
2239
+ );
2240
+ }</code></pre>
2241
+
2242
+ <h2 id="api-routes" class="text-2xl font-semibold mt-12 mb-4">API Routes</h2>
2243
+ <p class="mb-4">Create API endpoints by exporting HTTP method handlers:</p>
2244
+ <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) {
2245
+ <span class="text-violet-400">return</span> Response.json({ message: <span class="text-emerald-400">'Hello from API!'</span> });
2246
+ }
2247
+
2248
+ <span class="text-violet-400">export async function</span> <span class="text-yellow-300">POST</span>(<span class="text-orange-400">request</span>: Request) {
2249
+ <span class="text-violet-400">const</span> body = <span class="text-violet-400">await</span> request.json();
2250
+ <span class="text-violet-400">return</span> Response.json({ received: body });
2251
+ }</code></pre>
2252
+
2253
+ <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">
2254
+ <h3 class="font-semibold text-lg mb-2">\u{1F680} Ready to build?</h3>
2255
+ <p class="text-zinc-600 dark:text-zinc-400 mb-4">Start creating your first page by running:</p>
2256
+ <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>
2160
2257
  </div>
2258
+ </main>
2259
+ </div>
2260
+ ` + footer;
2261
+ }
2262
+ function generateLearnPage() {
2263
+ return baseStyles.replace("%TITLE%", "Learn") + header + `
2264
+ <main class="max-w-4xl mx-auto px-6 py-16">
2265
+ <div class="text-center mb-16">
2266
+ <h1 class="text-4xl sm:text-5xl font-bold mb-4">Learn Float.js</h1>
2267
+ <p class="text-lg text-zinc-600 dark:text-zinc-400 max-w-2xl mx-auto">
2268
+ Follow our step-by-step tutorial to master Float.js and build your first application
2269
+ </p>
2161
2270
  </div>
2162
2271
 
2163
- <div class="code-section">
2164
- <div class="code-header">
2165
- <div class="code-dots">
2166
- <div class="code-dot"></div>
2167
- <div class="code-dot"></div>
2168
- <div class="code-dot"></div>
2272
+ <!-- Tutorial Steps -->
2273
+ <div class="space-y-6">
2274
+
2275
+ <!-- Step 1 -->
2276
+ <div class="p-6 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl">
2277
+ <div class="flex items-start gap-4">
2278
+ <div class="w-10 h-10 bg-blue-100 dark:bg-blue-500/20 rounded-xl flex items-center justify-center flex-shrink-0">
2279
+ <span class="font-bold text-blue-600 dark:text-blue-400">1</span>
2280
+ </div>
2281
+ <div class="flex-1">
2282
+ <h3 class="font-semibold text-xl mb-2">Create Your Project</h3>
2283
+ <p class="text-zinc-600 dark:text-zinc-400 mb-4">Start by creating a new Float.js project using the CLI</p>
2284
+ <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>
2285
+ </div>
2169
2286
  </div>
2170
- <span class="code-title">app/page.tsx</span>
2171
2287
  </div>
2172
- <div class="code-block">
2173
- <div class="code-line">
2174
- <span class="code-number">1</span>
2175
- <span class="code-content"><span class="code-keyword">export default function</span> <span class="code-function">HomePage</span>() {</span>
2176
- </div>
2177
- <div class="code-line">
2178
- <span class="code-number">2</span>
2179
- <span class="code-content"> <span class="code-keyword">return</span> (</span>
2288
+
2289
+ <!-- Step 2 -->
2290
+ <div class="p-6 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl">
2291
+ <div class="flex items-start gap-4">
2292
+ <div class="w-10 h-10 bg-violet-100 dark:bg-violet-500/20 rounded-xl flex items-center justify-center flex-shrink-0">
2293
+ <span class="font-bold text-violet-600 dark:text-violet-400">2</span>
2294
+ </div>
2295
+ <div class="flex-1">
2296
+ <h3 class="font-semibold text-xl mb-2">Start the Development Server</h3>
2297
+ <p class="text-zinc-600 dark:text-zinc-400 mb-4">Navigate to your project and start the dev server</p>
2298
+ <pre class="bg-zinc-900 text-zinc-100 p-4 rounded-xl text-sm font-mono overflow-x-auto"><code>cd my-first-app
2299
+ npm run dev</code></pre>
2300
+ </div>
2180
2301
  </div>
2181
- <div class="code-line">
2182
- <span class="code-number">3</span>
2183
- <span class="code-content"> <span class="code-tag">&lt;h1&gt;</span>Hello, Float.js!<span class="code-tag">&lt;/h1&gt;</span></span>
2302
+ </div>
2303
+
2304
+ <!-- Step 3 -->
2305
+ <div class="p-6 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl">
2306
+ <div class="flex items-start gap-4">
2307
+ <div class="w-10 h-10 bg-emerald-100 dark:bg-emerald-500/20 rounded-xl flex items-center justify-center flex-shrink-0">
2308
+ <span class="font-bold text-emerald-600 dark:text-emerald-400">3</span>
2309
+ </div>
2310
+ <div class="flex-1">
2311
+ <h3 class="font-semibold text-xl mb-2">Create Your First Page</h3>
2312
+ <p class="text-zinc-600 dark:text-zinc-400 mb-4">Create a page component in the app directory</p>
2313
+ <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>
2314
+ <span class="text-violet-400">export default</span> <span class="text-blue-400">function</span> <span class="text-yellow-300">HomePage</span>() {
2315
+ <span class="text-violet-400">return</span> (
2316
+ <span class="text-zinc-500">&lt;</span><span class="text-emerald-400">main</span><span class="text-zinc-500">&gt;</span>
2317
+ <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>
2318
+ <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>
2319
+ <span class="text-zinc-500">&lt;/</span><span class="text-emerald-400">main</span><span class="text-zinc-500">&gt;</span>
2320
+ );
2321
+ }</code></pre>
2322
+ </div>
2184
2323
  </div>
2185
- <div class="code-line">
2186
- <span class="code-number">4</span>
2187
- <span class="code-content"> );</span>
2324
+ </div>
2325
+
2326
+ <!-- Step 4 -->
2327
+ <div class="p-6 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl">
2328
+ <div class="flex items-start gap-4">
2329
+ <div class="w-10 h-10 bg-amber-100 dark:bg-amber-500/20 rounded-xl flex items-center justify-center flex-shrink-0">
2330
+ <span class="font-bold text-amber-600 dark:text-amber-400">4</span>
2331
+ </div>
2332
+ <div class="flex-1">
2333
+ <h3 class="font-semibold text-xl mb-2">Add an API Route</h3>
2334
+ <p class="text-zinc-600 dark:text-zinc-400 mb-4">Create your backend API with simple handlers</p>
2335
+ <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>
2336
+ <span class="text-violet-400">export async function</span> <span class="text-yellow-300">GET</span>() {
2337
+ <span class="text-violet-400">return</span> Response.json({
2338
+ message: <span class="text-emerald-400">'Hello from the API!'</span>,
2339
+ timestamp: <span class="text-violet-400">new</span> Date().toISOString()
2340
+ });
2341
+ }</code></pre>
2342
+ </div>
2188
2343
  </div>
2189
- <div class="code-line">
2190
- <span class="code-number">5</span>
2191
- <span class="code-content">}</span>
2344
+ </div>
2345
+
2346
+ <!-- Step 5 -->
2347
+ <div class="p-6 bg-zinc-50 dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl">
2348
+ <div class="flex items-start gap-4">
2349
+ <div class="w-10 h-10 bg-pink-100 dark:bg-pink-500/20 rounded-xl flex items-center justify-center flex-shrink-0">
2350
+ <span class="font-bold text-pink-600 dark:text-pink-400">5</span>
2351
+ </div>
2352
+ <div class="flex-1">
2353
+ <h3 class="font-semibold text-xl mb-2">Build for Production</h3>
2354
+ <p class="text-zinc-600 dark:text-zinc-400 mb-4">Ready to deploy? Build your application</p>
2355
+ <pre class="bg-zinc-900 text-zinc-100 p-4 rounded-xl text-sm font-mono overflow-x-auto"><code>npm run build
2356
+ npm start</code></pre>
2357
+ </div>
2192
2358
  </div>
2193
2359
  </div>
2360
+
2194
2361
  </div>
2195
2362
 
2196
- <div class="quick-start">
2197
- <h2>Crea tu primera p\xE1gina</h2>
2198
- <div class="quick-start-cmd" onclick="navigator.clipboard.writeText('touch app/about/page.tsx')">
2199
- <span class="prompt">$</span>
2200
- <span class="text">touch app/about/page.tsx</span>
2201
- <span class="copy">\u{1F4CB}</span>
2363
+ <!-- Next Steps -->
2364
+ <div class="mt-16 text-center">
2365
+ <h2 class="text-2xl font-bold mb-4">What's Next?</h2>
2366
+ <p class="text-zinc-600 dark:text-zinc-400 mb-8">Explore more features and capabilities</p>
2367
+ <div class="flex flex-wrap justify-center gap-4">
2368
+ <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">
2369
+ Read the Docs
2370
+ </a>
2371
+ <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">
2372
+ View Examples
2373
+ </a>
2202
2374
  </div>
2203
2375
  </div>
2376
+ </main>
2377
+ ` + footer;
2378
+ }
2379
+ function generateExamplesPage() {
2380
+ return baseStyles.replace("%TITLE%", "Examples") + header + `
2381
+ <main class="max-w-6xl mx-auto px-6 py-16">
2382
+ <div class="text-center mb-16">
2383
+ <h1 class="text-4xl sm:text-5xl font-bold mb-4">Examples</h1>
2384
+ <p class="text-lg text-zinc-600 dark:text-zinc-400 max-w-2xl mx-auto">
2385
+ Explore example projects to learn common patterns and best practices
2386
+ </p>
2387
+ </div>
2204
2388
 
2205
- <div class="links">
2206
- <a href="https://floatjs.dev/docs" target="_blank" class="link">
2207
- <span>\u{1F4D6}</span> Documentaci\xF3n
2208
- </a>
2209
- <a href="https://github.com/floatjs/float" target="_blank" class="link">
2210
- <span>\u2B50</span> GitHub
2211
- </a>
2212
- <a href="https://floatjs.dev/examples" target="_blank" class="link">
2213
- <span>\u{1F3A8}</span> Ejemplos
2214
- </a>
2389
+ <!-- Examples Grid -->
2390
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
2391
+
2392
+ <!-- Basic App -->
2393
+ <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">
2394
+ <div class="w-12 h-12 bg-blue-100 dark:bg-blue-500/20 rounded-xl flex items-center justify-center mb-4">
2395
+ <svg class="w-6 h-6 text-blue-600 dark:text-blue-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2396
+ <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"/>
2397
+ </svg>
2398
+ </div>
2399
+ <h3 class="font-semibold text-lg mb-2">Basic App</h3>
2400
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">Simple starter with pages, layouts, and routing</p>
2401
+ <div class="flex flex-wrap gap-2">
2402
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">React</span>
2403
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">TypeScript</span>
2404
+ </div>
2405
+ </div>
2406
+
2407
+ <!-- Blog -->
2408
+ <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">
2409
+ <div class="w-12 h-12 bg-violet-100 dark:bg-violet-500/20 rounded-xl flex items-center justify-center mb-4">
2410
+ <svg class="w-6 h-6 text-violet-600 dark:text-violet-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2411
+ <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"/>
2412
+ </svg>
2413
+ </div>
2414
+ <h3 class="font-semibold text-lg mb-2">Blog</h3>
2415
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">Full blog with MDX, dynamic routes, and SSG</p>
2416
+ <div class="flex flex-wrap gap-2">
2417
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">MDX</span>
2418
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">SSG</span>
2419
+ </div>
2420
+ </div>
2421
+
2422
+ <!-- API Backend -->
2423
+ <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">
2424
+ <div class="w-12 h-12 bg-emerald-100 dark:bg-emerald-500/20 rounded-xl flex items-center justify-center mb-4">
2425
+ <svg class="w-6 h-6 text-emerald-600 dark:text-emerald-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2426
+ <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"/>
2427
+ </svg>
2428
+ </div>
2429
+ <h3 class="font-semibold text-lg mb-2">API Backend</h3>
2430
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">REST API with authentication and database</p>
2431
+ <div class="flex flex-wrap gap-2">
2432
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">API</span>
2433
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">Auth</span>
2434
+ </div>
2435
+ </div>
2436
+
2437
+ <!-- AI Chat -->
2438
+ <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">
2439
+ <div class="w-12 h-12 bg-pink-100 dark:bg-pink-500/20 rounded-xl flex items-center justify-center mb-4">
2440
+ <svg class="w-6 h-6 text-pink-600 dark:text-pink-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2441
+ <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"/>
2442
+ </svg>
2443
+ </div>
2444
+ <h3 class="font-semibold text-lg mb-2">AI Chat</h3>
2445
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">Streaming chat with OpenAI integration</p>
2446
+ <div class="flex flex-wrap gap-2">
2447
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">AI</span>
2448
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">Streaming</span>
2449
+ </div>
2450
+ </div>
2451
+
2452
+ <!-- E-commerce -->
2453
+ <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">
2454
+ <div class="w-12 h-12 bg-amber-100 dark:bg-amber-500/20 rounded-xl flex items-center justify-center mb-4">
2455
+ <svg class="w-6 h-6 text-amber-600 dark:text-amber-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2456
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z"/>
2457
+ </svg>
2458
+ </div>
2459
+ <h3 class="font-semibold text-lg mb-2">E-commerce</h3>
2460
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">Store with cart, checkout, and payments</p>
2461
+ <div class="flex flex-wrap gap-2">
2462
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">Stripe</span>
2463
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">Cart</span>
2464
+ </div>
2465
+ </div>
2466
+
2467
+ <!-- Dashboard -->
2468
+ <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">
2469
+ <div class="w-12 h-12 bg-cyan-100 dark:bg-cyan-500/20 rounded-xl flex items-center justify-center mb-4">
2470
+ <svg class="w-6 h-6 text-cyan-600 dark:text-cyan-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2471
+ <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"/>
2472
+ </svg>
2473
+ </div>
2474
+ <h3 class="font-semibold text-lg mb-2">Dashboard</h3>
2475
+ <p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4">Admin panel with charts and real-time data</p>
2476
+ <div class="flex flex-wrap gap-2">
2477
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">Charts</span>
2478
+ <span class="text-xs px-2 py-1 bg-zinc-100 dark:bg-zinc-800 rounded-md">Realtime</span>
2479
+ </div>
2480
+ </div>
2481
+
2215
2482
  </div>
2216
2483
 
2217
- <div class="footer">
2218
- Float.js v2.0.4 \u2014 Made with \u26A1 for the modern web
2484
+ <!-- CTA -->
2485
+ <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">
2486
+ <h2 class="text-2xl font-bold mb-4">Want to contribute?</h2>
2487
+ <p class="text-zinc-600 dark:text-zinc-400 mb-6">Share your example with the community</p>
2488
+ <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">
2489
+ <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>
2490
+ View on GitHub
2491
+ </a>
2219
2492
  </div>
2220
- </div>
2221
- </body>
2222
- </html>`;
2493
+ </main>
2494
+ ` + footer;
2223
2495
  }
2224
2496
 
2225
2497
  // src/server/dev-server.ts
@@ -2337,6 +2609,21 @@ ${FLOAT_ERROR_OVERLAY}
2337
2609
  res.end(generateWelcomePage());
2338
2610
  return;
2339
2611
  }
2612
+ if (pathname === "/__docs") {
2613
+ res.writeHead(200, { "Content-Type": "text/html; charset=utf-8", "Cache-Control": "no-cache" });
2614
+ res.end(generateDocsPage());
2615
+ return;
2616
+ }
2617
+ if (pathname === "/__learn") {
2618
+ res.writeHead(200, { "Content-Type": "text/html; charset=utf-8", "Cache-Control": "no-cache" });
2619
+ res.end(generateLearnPage());
2620
+ return;
2621
+ }
2622
+ if (pathname === "/__examples") {
2623
+ res.writeHead(200, { "Content-Type": "text/html; charset=utf-8", "Cache-Control": "no-cache" });
2624
+ res.end(generateExamplesPage());
2625
+ return;
2626
+ }
2340
2627
  if (!route) {
2341
2628
  res.writeHead(404, { "Content-Type": "text/html" });
2342
2629
  res.end(create404Page(pathname));