webfluent 0.4.0-alpha

The Web-First Language — compiles to HTML, CSS, JavaScript, and PDF. 50+ built-in components, reactivity, routing, i18n, SSG, and template engine.
Documentation
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Design System & Styling</title>
    <meta name="description" content="A programming language that compiles to HTML, CSS, and JavaScript. Build SPAs and static sites with built-in components, reactivity, routing, i18n, and animations.">
    <link rel="stylesheet" href="../styles.css">
</head>
<body>
    <div id="app">
        <!--wf-component-->
        <div class="wf-row">
            <!--wf-component-->
            <div class="wf-container wf-animate-fadeIn">
                <div class="wf-spacer"></div>
                <h1 class="wf-heading wf-heading--h1">Design System &amp; Styling</h1><p class="wf-text wf-text--muted">Token-based design system. Every component uses design tokens for colors, spacing, typography. Change the entire look with a config update.</p><div class="wf-spacer"></div>
                <h2 class="wf-heading wf-heading--h2">Variant Modifiers</h2><p class="wf-text">Apply common styles with modifier keywords.</p><div class="wf-spacer"></div>
                <div class="wf-card wf-card--outlined">
                    <div class="wf-card__header">
                        <p class="wf-text wf-text--bold">Size Modifiers</p></div><div class="wf-card__body">
                        <div class="wf-row">
                            <button class="wf-btn wf-btn--primary wf-btn--small">Small</button><button class="wf-btn wf-btn--primary">Medium</button><button class="wf-btn wf-btn--primary wf-btn--large">Large</button></div></div></div><div class="wf-spacer"></div>
                <div class="wf-card wf-card--outlined">
                    <div class="wf-card__header">
                        <p class="wf-text wf-text--bold">Color Modifiers</p></div><div class="wf-card__body">
                        <div class="wf-row">
                            <button class="wf-btn wf-btn--primary">Primary</button><button class="wf-btn wf-btn--secondary">Secondary</button><button class="wf-btn wf-btn--success">Success</button><button class="wf-btn wf-btn--danger">Danger</button><button class="wf-btn wf-btn--warning">Warning</button><button class="wf-btn wf-btn--info">Info</button></div><div class="wf-spacer"></div>
                        <div class="wf-row">
                            <span class="wf-badge wf-badge--primary">Primary</span><span class="wf-badge wf-badge--success">Success</span><span class="wf-badge wf-badge--danger">Danger</span><span class="wf-badge wf-badge--warning">Warning</span></div></div></div><div class="wf-spacer"></div>
                <div class="wf-card wf-card--outlined">
                    <div class="wf-card__header">
                        <p class="wf-text wf-text--bold">Shape and Elevation</p></div><div class="wf-card__body">
                        <div class="wf-row">
                            <button class="wf-btn wf-btn--primary">Default</button><button class="wf-btn wf-btn--primary wf-btn--rounded">Rounded</button><button class="wf-btn wf-btn--primary wf-btn--full">Full Width</button></div><div class="wf-spacer"></div>
                        <div class="wf-row">
                            <div class="wf-card">
                                <div class="wf-card__body">
                                    <p class="wf-text">Default</p></div></div><div class="wf-card wf-card--elevated">
                                <div class="wf-card__body">
                                    <p class="wf-text">Elevated</p></div></div><div class="wf-card wf-card--outlined">
                                <div class="wf-card__body">
                                    <p class="wf-text">Outlined</p></div></div></div></div></div><div class="wf-spacer"></div>
                <div class="wf-card wf-card--outlined">
                    <div class="wf-card__header">
                        <p class="wf-text wf-text--bold">Text Modifiers</p></div><div class="wf-card__body">
                        <p class="wf-text wf-text--bold">Bold text.</p><p class="wf-text wf-text--italic">Italic text.</p><p class="wf-text">Uppercase text.</p><p class="wf-text wf-text--muted">Muted text.</p><p class="wf-text wf-text--primary">Primary colored text.</p><p class="wf-text wf-text--small">Small text.</p><p class="wf-text wf-text--large">Large text.</p></div></div><div class="wf-spacer"></div>
                <hr class="wf-divider">
                <div class="wf-spacer"></div>
                <h2 class="wf-heading wf-heading--h2">Design Tokens</h2><p class="wf-text">All styling is built on tokens — CSS custom properties. Override any token in your config.</p><div class="wf-spacer"></div>
                <div class="wf-row">
                    <div class="wf-col">
                        <div class="wf-card wf-card--outlined">
                            <div class="wf-card__header">
                                <p class="wf-text wf-text--bold">Colors</p></div><div class="wf-card__body">
                                <table class="wf-table">
                                    <thead>
                                        <td>Token</td><td>Value</td></thead><tr>
                                        <td>color-primary</td><td>#3B82F6</td></tr><tr>
                                        <td>color-success</td><td>#22C55E</td></tr><tr>
                                        <td>color-danger</td><td>#EF4444</td></tr><tr>
                                        <td>color-warning</td><td>#F59E0B</td></tr><tr>
                                        <td>color-text</td><td>#0F172A</td></tr><tr>
                                        <td>color-border</td><td>#E2E8F0</td></tr></table></div></div></div><div class="wf-col">
                        <div class="wf-card wf-card--outlined">
                            <div class="wf-card__header">
                                <p class="wf-text wf-text--bold">Spacing and Radius</p></div><div class="wf-card__body">
                                <table class="wf-table">
                                    <thead>
                                        <td>Token</td><td>Value</td></thead><tr>
                                        <td>spacing-xs</td><td>0.25rem</td></tr><tr>
                                        <td>spacing-sm</td><td>0.5rem</td></tr><tr>
                                        <td>spacing-md</td><td>1rem</td></tr><tr>
                                        <td>spacing-lg</td><td>1.5rem</td></tr><tr>
                                        <td>radius-md</td><td>0.5rem</td></tr><tr>
                                        <td>radius-full</td><td>9999px</td></tr></table></div></div></div></div><div class="wf-spacer"></div>
                <hr class="wf-divider">
                <div class="wf-spacer"></div>
                <h2 class="wf-heading wf-heading--h2">Themes</h2><p class="wf-text">4 built-in themes. Set in webfluent.app.json. Each preview below shows the actual colors and style of that theme.</p><div class="wf-spacer"></div>
                <div class="wf-grid" style="grid-template-columns: repeat(2, 1fr)">
                    <div class="wf-card">
                        <div class="wf-card__body">
                            <div class="wf-row">
                                <span class="wf-badge wf-badge--primary">default</span><p class="wf-text wf-text--bold">Default</p></div><div class="wf-spacer"></div>
                            <p class="wf-text wf-text--muted wf-text--small">Clean, modern light theme with blue primary.</p><div class="wf-spacer"></div>
                            <div class="wf-row">
                                <button class="wf-btn wf-btn--primary wf-btn--small">Primary</button><button class="wf-btn wf-btn--success wf-btn--small">Success</button><span class="wf-badge wf-badge--info">Tag</span></div><div class="wf-spacer"></div>
                            <progress class="wf-progress wf-progress--primary" value="65" max="100"></progress><div class="wf-spacer"></div>
                            <code class="wf-code">&quot;theme&quot;: { &quot;name&quot;: &quot;default&quot; }</code></div></div><div class="wf-card">
                        <div class="wf-card__body">
                            <div class="wf-row">
                                <span class="wf-badge wf-badge--secondary">dark</span><p class="wf-text wf-text--bold">Dark</p></div><div class="wf-spacer"></div>
                            <p class="wf-text wf-text--small">Dark backgrounds with light text and vibrant accents.</p><div class="wf-spacer"></div>
                            <div class="wf-row">
                                <button class="wf-btn wf-btn--primary wf-btn--small">Primary</button><button class="wf-btn wf-btn--danger wf-btn--small">Danger</button><span class="wf-badge wf-badge--success">Live</span></div><div class="wf-spacer"></div>
                            <progress class="wf-progress wf-progress--info" value="80" max="100"></progress><div class="wf-spacer"></div>
                            <code class="wf-code">&quot;theme&quot;: { &quot;name&quot;: &quot;dark&quot; }</code></div></div><div class="wf-card">
                        <div class="wf-card__body">
                            <div class="wf-row">
                                <span class="wf-badge">minimal</span><p class="wf-text wf-text--bold">Minimal</p></div><div class="wf-spacer"></div>
                            <p class="wf-text wf-text--small">Black and white. No shadows, no border-radius. Pure content.</p><div class="wf-spacer"></div>
                            <div class="wf-row">
                                <button class="wf-btn wf-btn--small">Action</button><span class="wf-badge">Note</span></div><div class="wf-spacer"></div>
                            <progress class="wf-progress" value="50" max="100"></progress><div class="wf-spacer"></div>
                            <code class="wf-code">&quot;theme&quot;: { &quot;name&quot;: &quot;minimal&quot; }</code></div></div><div class="wf-card">
                        <div class="wf-card__body">
                            <div class="wf-row">
                                <span class="wf-badge wf-badge--danger">brutalist</span><p class="wf-text wf-text--bold">Brutalist</p></div><div class="wf-spacer"></div>
                            <p class="wf-text wf-text--small">Monospace font, bold red primary, hard offset shadows.</p><div class="wf-spacer"></div>
                            <div class="wf-row">
                                <button class="wf-btn wf-btn--danger wf-btn--small">Action</button><span class="wf-badge wf-badge--danger">Alert</span></div><div class="wf-spacer"></div>
                            <progress class="wf-progress wf-progress--danger" value="90" max="100"></progress><div class="wf-spacer"></div>
                            <code class="wf-code">&quot;theme&quot;: { &quot;name&quot;: &quot;brutalist&quot; }</code></div></div></div><div class="wf-spacer"></div>
                <hr class="wf-divider">
                <div class="wf-spacer"></div>
                <h2 class="wf-heading wf-heading--h2">Custom Tokens</h2><p class="wf-text">Override any design token in your config to customize the theme.</p><div class="wf-spacer"></div>
                <div class="wf-card wf-card--outlined">
                    <div class="wf-card__body">
                        <code class="wf-code">{
  &quot;theme&quot;: {
    &quot;name&quot;: &quot;default&quot;,
    &quot;tokens&quot;: {
      &quot;color-primary&quot;: &quot;#8B5CF6&quot;,
      &quot;color-secondary&quot;: &quot;#EC4899&quot;,
      &quot;font-family&quot;: &quot;Poppins, sans-serif&quot;,
      &quot;radius-md&quot;: &quot;1rem&quot;
    }
  }
}</code></div></div><div class="wf-spacer"></div>
                <hr class="wf-divider">
                <div class="wf-spacer"></div>
                <h2 class="wf-heading wf-heading--h2">Style Blocks</h2><p class="wf-text">Override styles on any component with inline style blocks.</p><div class="wf-spacer"></div>
                <div class="wf-card wf-card--outlined">
                    <div class="wf-card__body">
                        <code class="wf-code">Button(&quot;Custom&quot;) {
    style {
        background: &quot;#8B5CF6&quot;
        padding: xl
        radius: lg
    }
}</code></div></div><div class="wf-spacer"></div>
            </div></div>
        <!--wf-component-->
    </div>
    <script src="../app.js"></script>
</body>
</html>