UNPKG

@teachinglab/omd

Version:

omd

454 lines (405 loc) 16.2 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>OMD Library Documentation</title> <style> :root { --primary: #3498db; --primary-dark: #2980b9; --text: #2c3e50; --text-light: #666; --bg: #f5f5f5; --bg-card: #ffffff; --border: #e9ecef; --shadow: 0 2px 4px rgba(0,0,0,0.1); --radius: 8px; --transition: all 0.2s ease; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; line-height: 1.6; color: var(--text); margin: 0; padding: 0; background-color: var(--bg); } .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 40px 20px; text-align: center; margin-bottom: 40px; } .header h1 { margin: 0; font-size: 2.5em; font-weight: 700; } .header p { margin: 10px 0 0; opacity: 0.9; font-size: 1.2em; } .container { max-width: 1400px; margin: 0 auto; padding: 0 20px; display: flex; gap: 30px; } .sidebar { flex: 0 0 300px; background: var(--bg-card); padding: 25px; border-radius: var(--radius); box-shadow: var(--shadow); height: fit-content; position: sticky; top: 20px; max-height: calc(100vh - 40px); overflow-y: auto; } .content { flex: 1; background: var(--bg-card); padding: 30px; border-radius: var(--radius); box-shadow: var(--shadow); min-height: 800px; } .nav-section { margin-bottom: 25px; } .nav-section h3 { color: var(--text); font-size: 14px; text-transform: uppercase; margin: 0 0 15px; padding-bottom: 8px; border-bottom: 2px solid var(--border); font-weight: 600; } .nav-links { list-style: none; padding: 0; margin: 0; } .nav-links li { margin-bottom: 5px; } .nav-links a { color: var(--text); text-decoration: none; display: block; padding: 8px 12px; border-radius: var(--radius); transition: var(--transition); font-size: 0.95em; } .nav-links a:hover { background-color: #f0f0f0; color: var(--primary); transform: translateX(5px); } .nav-links a.active { background-color: var(--primary); color: white; } .search-box { margin-bottom: 20px; position: relative; } .search-box input { width: 100%; padding: 10px 15px; border: 2px solid var(--border); border-radius: var(--radius); font-size: 14px; transition: var(--transition); } .search-box input:focus { outline: none; border-color: var(--primary); } .quick-links { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin: 25px 0; } .quick-link { background: #f8f9fa; padding: 20px; border-radius: var(--radius); text-decoration: none; color: var(--text); transition: var(--transition); text-align: center; border: 1px solid var(--border); } .quick-link:hover { transform: translateY(-3px); box-shadow: var(--shadow); border-color: var(--primary); } .quick-link i { font-size: 24px; color: var(--primary); margin-bottom: 10px; } .feature-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; margin: 30px 0; } .feature-card { background: #f8f9fa; padding: 25px; border-radius: var(--radius); border: 1px solid var(--border); transition: var(--transition); } .feature-card:hover { transform: translateY(-3px); box-shadow: var(--shadow); } .feature-card h4 { margin: 0 0 15px; color: var(--primary); display: flex; align-items: center; gap: 10px; } .feature-card p { margin: 0; color: var(--text-light); } code { background-color: #f4f4f4; padding: 2px 6px; border-radius: 4px; font-family: 'Consolas', 'Monaco', monospace; font-size: 0.9em; } pre { background-color: #f4f4f4; padding: 15px; border-radius: var(--radius); overflow-x: auto; margin: 20px 0; } .version-badge { display: inline-block; padding: 4px 8px; background: var(--primary); color: white; border-radius: 12px; font-size: 12px; margin-left: 10px; } @media (max-width: 1024px) { .container { flex-direction: column; } .sidebar { position: static; width: auto; } } </style> </head> <body> <div class="header"> <h1>OMD Library Documentation</h1> <p>On-screen Math Display - Interactive Mathematical Expression Rendering</p> <span class="version-badge">v1.0.0</span> </div> <div class="container"> <aside class="sidebar"> <div class="search-box"> <input type="text" placeholder="Search documentation..." id="search-docs"> </div> <div class="nav-section"> <h3>Getting Started</h3> <ul class="nav-links"> <li><a href="#overview" class="active">Overview</a></li> <li><a href="#installation">Installation</a></li> <li><a href="#quick-start">Quick Start</a></li> <li><a href="../DOCUMENTATION.md">Main Documentation</a></li> <li><a href="user-guide.md">User Guide</a></li> </ul> </div> <div class="nav-section"> <h3>Core Components</h3> <ul class="nav-links"> <li><a href="api/omdDisplay.md">omdDisplay</a></li> <li><a href="api/omdCanvas.md">omdCanvas</a></li> <li><a href="api/omdStepVisualizer.md">omdStepVisualizer</a></li> </ul> </div> <div class="nav-section"> <h3>Node Types</h3> <ul class="nav-links"> <li><a href="api/omdConstantNode.md">omdConstantNode</a></li> <li><a href="api/omdVariableNode.md">omdVariableNode</a></li> <li><a href="api/omdBinaryExpressionNode.md">omdBinaryExpressionNode</a></li> <li><a href="api/omdUnaryExpressionNode.md">omdUnaryExpressionNode</a></li> <li><a href="api/omdPowerNode.md">omdPowerNode</a></li> <li><a href="api/omdSqrtNode.md">omdSqrtNode</a></li> <li><a href="api/omdRationalNode.md">omdRationalNode</a></li> <li><a href="api/omdEquationNode.md">omdEquationNode</a></li> <li><a href="api/omdFunctionNode.md">omdFunctionNode</a></li> <li><a href="api/omdParenthesisNode.md">omdParenthesisNode</a></li> <li><a href="api/omdEquationSequenceNode.md">omdEquationSequenceNode</a></li> </ul> </div> <div class="nav-section"> <h3>Utilities</h3> <ul class="nav-links"> <li><a href="api/omdHelpers.md">omdHelpers</a></li> <li><a href="api/omdConfigManager.md">omdConfigManager</a></li> <li><a href="api/simplificationRules.md">Simplification Rules</a></li> </ul> </div> </aside> <main class="content"> <section id="overview"> <h2>Overview</h2> <p>OMD (On-screen Math Display) is a powerful JavaScript library for rendering and manipulating mathematical expressions. It provides a flexible and intuitive API for creating interactive math visualizations.</p> <div class="quick-links"> <a href="../examples/index.html" class="quick-link"> <i>🎯</i> <h4>Live Examples</h4> <p>See OMD in action</p> </a> <a href="api-reference.md" class="quick-link"> <i>📚</i> <h4>API Reference</h4> <p>Detailed API docs</p> </a> <a href="user-guide.md" class="quick-link"> <i>📖</i> <h4>User Guide</h4> <p>Getting started and tutorials</p> </a> <a href="https://github.com/jaredschiffman/omd" class="quick-link"> <i>💻</i> <h4>GitHub</h4> <p>Source code</p> </a> </div> </section> <section id="installation"> <h2>Installation</h2> <p>Install via npm:</p> <pre><code>npm install @omd/core</code></pre> <p>Then import in your project:</p> <pre><code>import { omdDisplay, omdCanvas, omdStepVisualizer } from '@omd/core';</code></pre> </section> <section id="quick-start"> <h2>Quick Start</h2> <p>Create your first mathematical expression with just a few lines of code:</p> <pre><code>// Create a renderer const renderer = new omdDisplay(container); // Render an expression renderer.render('x^2 + 2x + 1');</code></pre> </section> <section id="step-visualizer"> <h2>Step-by-Step Visualization</h2> <p>Visualize equation solving and expression simplification step by step:</p> <pre><code>// Create a renderer and render the initial equation const renderer = new omdDisplay(container); renderer.render('2x + 3 = 7'); // Access the step-visualizer sequence const stepViz = renderer.getCurrentNode(); // omdStepVisualizer instance // Perform operations step-by-step stepViz.applyEquationOperation(3, 'subtract'); // 2x + 3 = 7 → 2x = 4 stepViz.applyEquationOperation(2, 'divide'); // 2x = 4 → x = 2</code></pre> <div class="feature-grid"> <div class="feature-card"> <h4>🔄 Automatic Step Generation</h4> <p>Automatically generate solution steps for equations and expressions.</p> </div> <div class="feature-card"> <h4>🔍 Step Filtering</h4> <p>Show or hide intermediate steps based on complexity level.</p> </div> <div class="feature-card"> <h4>📝 Step Annotations</h4> <p>Add explanatory text and highlights to each step.</p> </div> </div> </section> <section id="features"> <h2>Key Features</h2> <div class="feature-grid"> <div class="feature-card"> <h4>🎯 Zero Configuration</h4> <p>Get started quickly with sensible defaults. No complex setup required.</p> </div> <div class="feature-card"> <h4>📐 Step-by-Step Solving</h4> <p>Show mathematical work with automatic simplification and step filtering.</p> </div> <div class="feature-card"> <h4>🎨 Interactive Canvas</h4> <p>Create dynamic math visualizations with drag-and-drop support.</p> </div> <div class="feature-card"> <h4>🧮 Expression Operations</h4> <p>Manipulate expressions with built-in mathematical operations.</p> </div> <div class="feature-card"> <h4>🔧 Extensible</h4> <p>Create custom node types and extend functionality as needed.</p> </div> <div class="feature-card"> <h4>🌈 Educational Tools</h4> <p>Perfect for building interactive math learning applications.</p> </div> </div> </section> </main> </div> <script> // Search functionality const searchInput = document.getElementById('search-docs'); const navLinks = document.querySelectorAll('.nav-links a'); searchInput.addEventListener('input', (e) => { const searchTerm = e.target.value.toLowerCase(); navLinks.forEach(link => { const text = link.textContent.toLowerCase(); link.parentElement.style.display = text.includes(searchTerm) ? '' : 'none'; }); }); // Active link handling document.querySelectorAll('.nav-links a').forEach(link => { link.addEventListener('click', function(e) { if (this.getAttribute('href').startsWith('#')) { e.preventDefault(); document.querySelectorAll('.nav-links a').forEach(l => l.classList.remove('active')); this.classList.add('active'); const target = document.querySelector(this.getAttribute('href')); if (target) { target.scrollIntoView({ behavior: 'smooth' }); } } }); }); // Handle initial active state based on hash window.addEventListener('load', () => { const hash = window.location.hash; if (hash) { const activeLink = document.querySelector(`a[href="${hash}"]`); if (activeLink) { document.querySelectorAll('.nav-links a').forEach(l => l.classList.remove('active')); activeLink.classList.add('active'); } } }); </script> </body> </html>