@teachinglab/omd 0.6.1 → 0.6.2
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/README.md +257 -251
- package/README.old.md +137 -137
- package/canvas/core/canvasConfig.js +202 -202
- package/canvas/drawing/segment.js +167 -167
- package/canvas/drawing/stroke.js +385 -385
- package/canvas/events/eventManager.js +444 -444
- package/canvas/events/pointerEventHandler.js +262 -262
- package/canvas/index.js +48 -48
- package/canvas/tools/PointerTool.js +71 -71
- package/canvas/tools/tool.js +222 -222
- package/canvas/utils/boundingBox.js +377 -377
- package/canvas/utils/mathUtils.js +258 -258
- package/docs/api/configuration-options.md +198 -198
- package/docs/api/eventManager.md +82 -82
- package/docs/api/focusFrameManager.md +144 -144
- package/docs/api/index.md +105 -105
- package/docs/api/main.md +62 -62
- package/docs/api/omdBinaryExpressionNode.md +86 -86
- package/docs/api/omdCanvas.md +83 -83
- package/docs/api/omdConfigManager.md +112 -112
- package/docs/api/omdConstantNode.md +52 -52
- package/docs/api/omdDisplay.md +87 -87
- package/docs/api/omdEquationNode.md +174 -174
- package/docs/api/omdEquationSequenceNode.md +258 -258
- package/docs/api/omdEquationStack.md +192 -192
- package/docs/api/omdFunctionNode.md +82 -82
- package/docs/api/omdGroupNode.md +78 -78
- package/docs/api/omdHelpers.md +87 -87
- package/docs/api/omdLeafNode.md +85 -85
- package/docs/api/omdNode.md +201 -201
- package/docs/api/omdOperationDisplayNode.md +117 -117
- package/docs/api/omdOperatorNode.md +91 -91
- package/docs/api/omdParenthesisNode.md +133 -133
- package/docs/api/omdPopup.md +191 -191
- package/docs/api/omdPowerNode.md +131 -131
- package/docs/api/omdRationalNode.md +144 -144
- package/docs/api/omdSequenceNode.md +128 -128
- package/docs/api/omdSimplification.md +78 -78
- package/docs/api/omdSqrtNode.md +144 -144
- package/docs/api/omdStepVisualizer.md +146 -146
- package/docs/api/omdStepVisualizerHighlighting.md +65 -65
- package/docs/api/omdStepVisualizerInteractiveSteps.md +108 -108
- package/docs/api/omdStepVisualizerLayout.md +70 -70
- package/docs/api/omdStepVisualizerNodeUtils.md +140 -140
- package/docs/api/omdStepVisualizerTextBoxes.md +76 -76
- package/docs/api/omdToolbar.md +130 -130
- package/docs/api/omdTranscriptionService.md +95 -95
- package/docs/api/omdTreeDiff.md +169 -169
- package/docs/api/omdUnaryExpressionNode.md +137 -137
- package/docs/api/omdUtilities.md +82 -82
- package/docs/api/omdVariableNode.md +123 -123
- package/docs/api/selectTool.md +74 -74
- package/docs/api/simplificationEngine.md +97 -97
- package/docs/api/simplificationRules.md +76 -76
- package/docs/api/simplificationUtils.md +64 -64
- package/docs/api/transcribe.md +43 -43
- package/docs/api-reference.md +85 -85
- package/docs/index.html +453 -453
- package/docs/index.md +38 -38
- package/docs/omd-objects.md +258 -258
- package/index.js +79 -79
- package/jsvg/index.js +3 -0
- package/jsvg/jsvg.js +898 -898
- package/jsvg/jsvgComponents.js +357 -358
- package/npm-docs/DOCUMENTATION_SUMMARY.md +220 -220
- package/npm-docs/README.md +251 -251
- package/npm-docs/api/api-reference.md +85 -85
- package/npm-docs/api/configuration-options.md +198 -198
- package/npm-docs/api/eventManager.md +82 -82
- package/npm-docs/api/expression-nodes.md +561 -561
- package/npm-docs/api/focusFrameManager.md +144 -144
- package/npm-docs/api/index.md +105 -105
- package/npm-docs/api/main.md +62 -62
- package/npm-docs/api/omdBinaryExpressionNode.md +86 -86
- package/npm-docs/api/omdCanvas.md +83 -83
- package/npm-docs/api/omdConfigManager.md +112 -112
- package/npm-docs/api/omdConstantNode.md +52 -52
- package/npm-docs/api/omdDisplay.md +87 -87
- package/npm-docs/api/omdEquationNode.md +174 -174
- package/npm-docs/api/omdEquationSequenceNode.md +258 -258
- package/npm-docs/api/omdEquationStack.md +192 -192
- package/npm-docs/api/omdFunctionNode.md +82 -82
- package/npm-docs/api/omdGroupNode.md +78 -78
- package/npm-docs/api/omdHelpers.md +87 -87
- package/npm-docs/api/omdLeafNode.md +85 -85
- package/npm-docs/api/omdNode.md +201 -201
- package/npm-docs/api/omdOperationDisplayNode.md +117 -117
- package/npm-docs/api/omdOperatorNode.md +91 -91
- package/npm-docs/api/omdParenthesisNode.md +133 -133
- package/npm-docs/api/omdPopup.md +191 -191
- package/npm-docs/api/omdPowerNode.md +131 -131
- package/npm-docs/api/omdRationalNode.md +144 -144
- package/npm-docs/api/omdSequenceNode.md +128 -128
- package/npm-docs/api/omdSimplification.md +78 -78
- package/npm-docs/api/omdSqrtNode.md +144 -144
- package/npm-docs/api/omdStepVisualizer.md +146 -146
- package/npm-docs/api/omdStepVisualizerHighlighting.md +65 -65
- package/npm-docs/api/omdStepVisualizerInteractiveSteps.md +108 -108
- package/npm-docs/api/omdStepVisualizerLayout.md +70 -70
- package/npm-docs/api/omdStepVisualizerNodeUtils.md +140 -140
- package/npm-docs/api/omdStepVisualizerTextBoxes.md +76 -76
- package/npm-docs/api/omdToolbar.md +130 -130
- package/npm-docs/api/omdTranscriptionService.md +95 -95
- package/npm-docs/api/omdTreeDiff.md +169 -169
- package/npm-docs/api/omdUnaryExpressionNode.md +137 -137
- package/npm-docs/api/omdUtilities.md +82 -82
- package/npm-docs/api/omdVariableNode.md +123 -123
- package/npm-docs/api/selectTool.md +74 -74
- package/npm-docs/api/simplificationEngine.md +97 -97
- package/npm-docs/api/simplificationRules.md +76 -76
- package/npm-docs/api/simplificationUtils.md +64 -64
- package/npm-docs/api/transcribe.md +43 -43
- package/npm-docs/guides/equations.md +854 -854
- package/npm-docs/guides/factory-functions.md +354 -354
- package/npm-docs/guides/getting-started.md +318 -318
- package/npm-docs/guides/quick-examples.md +525 -525
- package/npm-docs/guides/visualizations.md +682 -682
- package/npm-docs/index.html +12 -0
- package/npm-docs/json-schemas.md +826 -826
- package/omd/config/omdConfigManager.js +279 -267
- package/omd/core/index.js +158 -158
- package/omd/core/omdEquationStack.js +546 -546
- package/omd/core/omdUtilities.js +113 -113
- package/omd/display/omdDisplay.js +969 -962
- package/omd/display/omdToolbar.js +501 -501
- package/omd/nodes/omdBinaryExpressionNode.js +459 -459
- package/omd/nodes/omdConstantNode.js +141 -141
- package/omd/nodes/omdEquationNode.js +1327 -1327
- package/omd/nodes/omdFunctionNode.js +351 -351
- package/omd/nodes/omdGroupNode.js +67 -67
- package/omd/nodes/omdLeafNode.js +76 -76
- package/omd/nodes/omdNode.js +556 -556
- package/omd/nodes/omdOperationDisplayNode.js +321 -321
- package/omd/nodes/omdOperatorNode.js +108 -108
- package/omd/nodes/omdParenthesisNode.js +292 -292
- package/omd/nodes/omdPowerNode.js +235 -235
- package/omd/nodes/omdRationalNode.js +295 -295
- package/omd/nodes/omdSqrtNode.js +307 -307
- package/omd/nodes/omdUnaryExpressionNode.js +227 -227
- package/omd/nodes/omdVariableNode.js +122 -122
- package/omd/simplification/omdSimplification.js +140 -140
- package/omd/simplification/omdSimplificationEngine.js +887 -887
- package/omd/simplification/package.json +5 -5
- package/omd/simplification/rules/binaryRules.js +1037 -1037
- package/omd/simplification/rules/functionRules.js +111 -111
- package/omd/simplification/rules/index.js +48 -48
- package/omd/simplification/rules/parenthesisRules.js +19 -19
- package/omd/simplification/rules/powerRules.js +143 -143
- package/omd/simplification/rules/rationalRules.js +725 -725
- package/omd/simplification/rules/sqrtRules.js +48 -48
- package/omd/simplification/rules/unaryRules.js +37 -37
- package/omd/simplification/simplificationRules.js +31 -31
- package/omd/simplification/simplificationUtils.js +1055 -1055
- package/omd/step-visualizer/omdStepVisualizer.js +947 -947
- package/omd/step-visualizer/omdStepVisualizerHighlighting.js +246 -246
- package/omd/step-visualizer/omdStepVisualizerLayout.js +892 -892
- package/omd/step-visualizer/omdStepVisualizerTextBoxes.js +200 -200
- package/omd/utils/aiNextEquationStep.js +106 -106
- package/omd/utils/omdNodeOverlay.js +638 -638
- package/omd/utils/omdPopup.js +1203 -1203
- package/omd/utils/omdStepVisualizerInteractiveSteps.js +684 -684
- package/omd/utils/omdStepVisualizerNodeUtils.js +267 -267
- package/omd/utils/omdTranscriptionService.js +123 -123
- package/omd/utils/omdTreeDiff.js +733 -733
- package/package.json +59 -57
- package/readme.html +184 -120
- package/src/index.js +74 -74
- package/src/json-schemas.md +576 -576
- package/src/omd-json-samples.js +147 -147
- package/src/omdApp.js +391 -391
- package/src/omdAppCanvas.js +335 -335
- package/src/omdBalanceHanger.js +199 -199
- package/src/omdColor.js +13 -13
- package/src/omdCoordinatePlane.js +541 -541
- package/src/omdExpression.js +115 -115
- package/src/omdFactory.js +150 -150
- package/src/omdFunction.js +114 -114
- package/src/omdMetaExpression.js +290 -290
- package/src/omdNaturalExpression.js +563 -563
- package/src/omdNode.js +383 -383
- package/src/omdNumber.js +52 -52
- package/src/omdNumberLine.js +114 -112
- package/src/omdNumberTile.js +118 -118
- package/src/omdOperator.js +72 -72
- package/src/omdPowerExpression.js +91 -91
- package/src/omdProblem.js +259 -259
- package/src/omdRatioChart.js +251 -251
- package/src/omdRationalExpression.js +114 -114
- package/src/omdSampleData.js +215 -215
- package/src/omdShapes.js +512 -512
- package/src/omdSpinner.js +151 -151
- package/src/omdString.js +49 -49
- package/src/omdTable.js +498 -498
- package/src/omdTapeDiagram.js +244 -244
- package/src/omdTerm.js +91 -91
- package/src/omdTileEquation.js +349 -349
- package/src/omdUtils.js +84 -84
- package/src/omdVariable.js +51 -51
|
@@ -1,318 +1,318 @@
|
|
|
1
|
-
# Getting Started with OMD
|
|
2
|
-
|
|
3
|
-
This guide will help you install and start using OMD (
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
### Using npm
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm install @teachinglab/omd
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
### Using yarn
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
yarn add @teachinglab/omd
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Basic Setup
|
|
20
|
-
|
|
21
|
-
### 1. Import OMD
|
|
22
|
-
|
|
23
|
-
```javascript
|
|
24
|
-
import { omdDisplay } from '@teachinglab/omd';
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### 2. Create a Container
|
|
28
|
-
|
|
29
|
-
Add a container element to your HTML:
|
|
30
|
-
|
|
31
|
-
```html
|
|
32
|
-
<div id="math-container"></div>
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### 3. Initialize and Render
|
|
36
|
-
|
|
37
|
-
```javascript
|
|
38
|
-
// Get the container element
|
|
39
|
-
const container = document.getElementById('math-container');
|
|
40
|
-
|
|
41
|
-
// Create a display instance
|
|
42
|
-
const display = new omdDisplay(container);
|
|
43
|
-
|
|
44
|
-
// Render an equation
|
|
45
|
-
display.render('2x + 3 = 11');
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Complete Example
|
|
49
|
-
|
|
50
|
-
Here's a complete HTML file with OMD:
|
|
51
|
-
|
|
52
|
-
```html
|
|
53
|
-
<!DOCTYPE html>
|
|
54
|
-
<html lang="en">
|
|
55
|
-
<head>
|
|
56
|
-
<meta charset="UTF-8">
|
|
57
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
58
|
-
<title>OMD Example</title>
|
|
59
|
-
<style>
|
|
60
|
-
body {
|
|
61
|
-
font-family: 'Albert Sans', sans-serif;
|
|
62
|
-
padding: 20px;
|
|
63
|
-
}
|
|
64
|
-
#math-container {
|
|
65
|
-
width: 100%;
|
|
66
|
-
height: 400px;
|
|
67
|
-
border: 1px solid #ccc;
|
|
68
|
-
border-radius: 8px;
|
|
69
|
-
}
|
|
70
|
-
</style>
|
|
71
|
-
</head>
|
|
72
|
-
<body>
|
|
73
|
-
<h1>My First OMD App</h1>
|
|
74
|
-
<div id="math-container"></div>
|
|
75
|
-
|
|
76
|
-
<script type="module">
|
|
77
|
-
import { omdDisplay, omdEquationNode } from '@teachinglab/omd';
|
|
78
|
-
|
|
79
|
-
const container = document.getElementById('math-container');
|
|
80
|
-
const display = new omdDisplay(container);
|
|
81
|
-
|
|
82
|
-
// Create and render an equation
|
|
83
|
-
const equation = omdEquationNode.fromString('2x + 3 = 11');
|
|
84
|
-
display.render(equation);
|
|
85
|
-
</script>
|
|
86
|
-
</body>
|
|
87
|
-
</html>
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
## Common Use Cases
|
|
91
|
-
|
|
92
|
-
### Rendering Different Components
|
|
93
|
-
|
|
94
|
-
#### 1. Simple Equation
|
|
95
|
-
|
|
96
|
-
```javascript
|
|
97
|
-
import { omdDisplay } from '@teachinglab/omd';
|
|
98
|
-
|
|
99
|
-
const display = new omdDisplay(container);
|
|
100
|
-
display.render('x + 5 = 10');
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
#### 2. Expression
|
|
104
|
-
|
|
105
|
-
```javascript
|
|
106
|
-
import { omdExpression } from '@teachinglab/omd';
|
|
107
|
-
|
|
108
|
-
const expr = new omdExpression();
|
|
109
|
-
expr.loadFromJSON("3x^2 + 5x - 2");
|
|
110
|
-
display.render(expr);
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
#### 3. Number Line
|
|
114
|
-
|
|
115
|
-
```javascript
|
|
116
|
-
import { omdNumberLine } from '@teachinglab/omd';
|
|
117
|
-
|
|
118
|
-
const numberLine = new omdNumberLine();
|
|
119
|
-
numberLine.loadFromJSON({
|
|
120
|
-
min: 0,
|
|
121
|
-
max: 10,
|
|
122
|
-
dotValues: [2, 5, 8],
|
|
123
|
-
label: "Number Line"
|
|
124
|
-
});
|
|
125
|
-
display.render(numberLine);
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
#### 4. Coordinate Plane
|
|
129
|
-
|
|
130
|
-
```javascript
|
|
131
|
-
import { omdCoordinatePlane } from '@teachinglab/omd';
|
|
132
|
-
|
|
133
|
-
const plane = new omdCoordinatePlane();
|
|
134
|
-
plane.loadFromJSON({
|
|
135
|
-
xMin: -10,
|
|
136
|
-
xMax: 10,
|
|
137
|
-
yMin: -10,
|
|
138
|
-
yMax: 10,
|
|
139
|
-
graphEquations: [
|
|
140
|
-
{ equation: 'y = x^2', color: '#e11d48', strokeWidth: 2 }
|
|
141
|
-
]
|
|
142
|
-
});
|
|
143
|
-
display.render(plane);
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
#### 5. Step-by-Step Solution
|
|
147
|
-
|
|
148
|
-
```javascript
|
|
149
|
-
import { omdEquationStack, omdEquationNode } from '@teachinglab/omd';
|
|
150
|
-
|
|
151
|
-
const steps = [
|
|
152
|
-
omdEquationNode.fromString('2x + 3 = 11'),
|
|
153
|
-
omdEquationNode.fromString('2x = 8'),
|
|
154
|
-
omdEquationNode.fromString('x = 4')
|
|
155
|
-
];
|
|
156
|
-
|
|
157
|
-
const stack = new omdEquationStack(steps, {
|
|
158
|
-
toolbar: true,
|
|
159
|
-
stepVisualizer: true
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
display.render(stack);
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
## Configuration
|
|
166
|
-
|
|
167
|
-
### Display Options
|
|
168
|
-
|
|
169
|
-
You can configure the display when creating it:
|
|
170
|
-
|
|
171
|
-
```javascript
|
|
172
|
-
const display = new omdDisplay(container, {
|
|
173
|
-
fontSize: 36,
|
|
174
|
-
centerContent: true,
|
|
175
|
-
fontFamily: 'Albert Sans'
|
|
176
|
-
});
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### Global Configuration
|
|
180
|
-
|
|
181
|
-
OMD uses a global configuration manager:
|
|
182
|
-
|
|
183
|
-
```javascript
|
|
184
|
-
import { omdConfigManager } from '@teachinglab/omd';
|
|
185
|
-
|
|
186
|
-
// Update global settings
|
|
187
|
-
omdConfigManager.setConfig({
|
|
188
|
-
defaultFontSize: 32,
|
|
189
|
-
defaultColor: '#333333',
|
|
190
|
-
highlightColor: '#FFD700'
|
|
191
|
-
});
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
## Loading from JSON
|
|
195
|
-
|
|
196
|
-
Most OMD components can be loaded from JSON:
|
|
197
|
-
|
|
198
|
-
```javascript
|
|
199
|
-
import { omdTable } from '@teachinglab/omd';
|
|
200
|
-
|
|
201
|
-
const table = new omdTable();
|
|
202
|
-
table.loadFromJSON({
|
|
203
|
-
equation: "y = x^2",
|
|
204
|
-
headers: ["x", "y"],
|
|
205
|
-
xMin: -5,
|
|
206
|
-
xMax: 5,
|
|
207
|
-
stepSize: 1,
|
|
208
|
-
title: "Quadratic Function"
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
display.render(table);
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
See the [JSON Schemas documentation](../json-schemas.md) for complete JSON specifications.
|
|
215
|
-
|
|
216
|
-
## Using with Build Tools
|
|
217
|
-
|
|
218
|
-
### Vite
|
|
219
|
-
|
|
220
|
-
OMD works seamlessly with Vite:
|
|
221
|
-
|
|
222
|
-
```javascript
|
|
223
|
-
// main.js
|
|
224
|
-
import { omdDisplay } from '@teachinglab/omd';
|
|
225
|
-
|
|
226
|
-
const display = new omdDisplay(document.getElementById('app'));
|
|
227
|
-
display.render('2x + 3 = 11');
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
### Webpack
|
|
231
|
-
|
|
232
|
-
Configure Webpack to handle ES modules:
|
|
233
|
-
|
|
234
|
-
```javascript
|
|
235
|
-
// webpack.config.js
|
|
236
|
-
module.exports = {
|
|
237
|
-
// ... other config
|
|
238
|
-
resolve: {
|
|
239
|
-
extensions: ['.js']
|
|
240
|
-
}
|
|
241
|
-
};
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
### React
|
|
245
|
-
|
|
246
|
-
OMD can be used with React using refs:
|
|
247
|
-
|
|
248
|
-
```jsx
|
|
249
|
-
import React, { useEffect, useRef } from 'react';
|
|
250
|
-
import { omdDisplay } from '@teachinglab/omd';
|
|
251
|
-
|
|
252
|
-
function MathComponent() {
|
|
253
|
-
const containerRef = useRef(null);
|
|
254
|
-
|
|
255
|
-
useEffect(() => {
|
|
256
|
-
if (containerRef.current) {
|
|
257
|
-
const display = new omdDisplay(containerRef.current);
|
|
258
|
-
display.render('2x + 3 = 11');
|
|
259
|
-
}
|
|
260
|
-
}, []);
|
|
261
|
-
|
|
262
|
-
return <div ref={containerRef} style={{ width: '100%', height: '400px' }} />;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
export default MathComponent;
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
## Next Steps
|
|
269
|
-
|
|
270
|
-
Now that you have OMD installed and working, explore these resources:
|
|
271
|
-
|
|
272
|
-
1. **[Visualizations Guide](./visualizations.md)** - Learn about all visual components
|
|
273
|
-
2. **[Equations Guide](./equations.md)** - Master equations and expressions
|
|
274
|
-
3. **[JSON Schemas](../json-schemas.md)** - Complete component reference
|
|
275
|
-
4. **[API Reference](../api/api-reference.md)** - Detailed API documentation
|
|
276
|
-
5. **[Examples](./quick-examples.md)** - More code examples
|
|
277
|
-
|
|
278
|
-
## Troubleshooting
|
|
279
|
-
|
|
280
|
-
### Module not found
|
|
281
|
-
|
|
282
|
-
If you get "Module not found" errors, ensure:
|
|
283
|
-
- OMD is installed: `npm install @teachinglab/omd`
|
|
284
|
-
- Your bundler supports ES modules
|
|
285
|
-
- Import paths are correct
|
|
286
|
-
|
|
287
|
-
### Display not rendering
|
|
288
|
-
|
|
289
|
-
If the display doesn't appear:
|
|
290
|
-
- Check that the container element exists in the DOM
|
|
291
|
-
- Ensure the container has width and height
|
|
292
|
-
- Check browser console for errors
|
|
293
|
-
|
|
294
|
-
### Style issues
|
|
295
|
-
|
|
296
|
-
For best results:
|
|
297
|
-
- Use `Albert Sans` font family
|
|
298
|
-
- Ensure adequate container dimensions
|
|
299
|
-
- Check that SVG rendering is supported in your browser
|
|
300
|
-
|
|
301
|
-
## Browser Support
|
|
302
|
-
|
|
303
|
-
OMD requires:
|
|
304
|
-
- Modern browser with ES6 support
|
|
305
|
-
- SVG rendering capabilities
|
|
306
|
-
- Native ES modules or a bundler
|
|
307
|
-
|
|
308
|
-
Tested on:
|
|
309
|
-
- Chrome 90+
|
|
310
|
-
- Firefox 88+
|
|
311
|
-
- Safari 14+
|
|
312
|
-
- Edge 90+
|
|
313
|
-
|
|
314
|
-
## Getting Help
|
|
315
|
-
|
|
316
|
-
- **GitHub Issues**: Report bugs or request features
|
|
317
|
-
- **Documentation**: Browse the complete [API Reference](../api/api-reference.md)
|
|
318
|
-
- **Examples**: Check the repository's `/examples` directory
|
|
1
|
+
# Getting Started with OMD
|
|
2
|
+
|
|
3
|
+
This guide will help you install and start using OMD (On-screen Math Display) in your project.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
### Using npm
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @teachinglab/omd
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### Using yarn
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
yarn add @teachinglab/omd
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Basic Setup
|
|
20
|
+
|
|
21
|
+
### 1. Import OMD
|
|
22
|
+
|
|
23
|
+
```javascript
|
|
24
|
+
import { omdDisplay } from '@teachinglab/omd';
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### 2. Create a Container
|
|
28
|
+
|
|
29
|
+
Add a container element to your HTML:
|
|
30
|
+
|
|
31
|
+
```html
|
|
32
|
+
<div id="math-container"></div>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 3. Initialize and Render
|
|
36
|
+
|
|
37
|
+
```javascript
|
|
38
|
+
// Get the container element
|
|
39
|
+
const container = document.getElementById('math-container');
|
|
40
|
+
|
|
41
|
+
// Create a display instance
|
|
42
|
+
const display = new omdDisplay(container);
|
|
43
|
+
|
|
44
|
+
// Render an equation
|
|
45
|
+
display.render('2x + 3 = 11');
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Complete Example
|
|
49
|
+
|
|
50
|
+
Here's a complete HTML file with OMD:
|
|
51
|
+
|
|
52
|
+
```html
|
|
53
|
+
<!DOCTYPE html>
|
|
54
|
+
<html lang="en">
|
|
55
|
+
<head>
|
|
56
|
+
<meta charset="UTF-8">
|
|
57
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
58
|
+
<title>OMD Example</title>
|
|
59
|
+
<style>
|
|
60
|
+
body {
|
|
61
|
+
font-family: 'Albert Sans', sans-serif;
|
|
62
|
+
padding: 20px;
|
|
63
|
+
}
|
|
64
|
+
#math-container {
|
|
65
|
+
width: 100%;
|
|
66
|
+
height: 400px;
|
|
67
|
+
border: 1px solid #ccc;
|
|
68
|
+
border-radius: 8px;
|
|
69
|
+
}
|
|
70
|
+
</style>
|
|
71
|
+
</head>
|
|
72
|
+
<body>
|
|
73
|
+
<h1>My First OMD App</h1>
|
|
74
|
+
<div id="math-container"></div>
|
|
75
|
+
|
|
76
|
+
<script type="module">
|
|
77
|
+
import { omdDisplay, omdEquationNode } from '@teachinglab/omd';
|
|
78
|
+
|
|
79
|
+
const container = document.getElementById('math-container');
|
|
80
|
+
const display = new omdDisplay(container);
|
|
81
|
+
|
|
82
|
+
// Create and render an equation
|
|
83
|
+
const equation = omdEquationNode.fromString('2x + 3 = 11');
|
|
84
|
+
display.render(equation);
|
|
85
|
+
</script>
|
|
86
|
+
</body>
|
|
87
|
+
</html>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Common Use Cases
|
|
91
|
+
|
|
92
|
+
### Rendering Different Components
|
|
93
|
+
|
|
94
|
+
#### 1. Simple Equation
|
|
95
|
+
|
|
96
|
+
```javascript
|
|
97
|
+
import { omdDisplay } from '@teachinglab/omd';
|
|
98
|
+
|
|
99
|
+
const display = new omdDisplay(container);
|
|
100
|
+
display.render('x + 5 = 10');
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### 2. Expression
|
|
104
|
+
|
|
105
|
+
```javascript
|
|
106
|
+
import { omdExpression } from '@teachinglab/omd';
|
|
107
|
+
|
|
108
|
+
const expr = new omdExpression();
|
|
109
|
+
expr.loadFromJSON("3x^2 + 5x - 2");
|
|
110
|
+
display.render(expr);
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
#### 3. Number Line
|
|
114
|
+
|
|
115
|
+
```javascript
|
|
116
|
+
import { omdNumberLine } from '@teachinglab/omd';
|
|
117
|
+
|
|
118
|
+
const numberLine = new omdNumberLine();
|
|
119
|
+
numberLine.loadFromJSON({
|
|
120
|
+
min: 0,
|
|
121
|
+
max: 10,
|
|
122
|
+
dotValues: [2, 5, 8],
|
|
123
|
+
label: "Number Line"
|
|
124
|
+
});
|
|
125
|
+
display.render(numberLine);
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
#### 4. Coordinate Plane
|
|
129
|
+
|
|
130
|
+
```javascript
|
|
131
|
+
import { omdCoordinatePlane } from '@teachinglab/omd';
|
|
132
|
+
|
|
133
|
+
const plane = new omdCoordinatePlane();
|
|
134
|
+
plane.loadFromJSON({
|
|
135
|
+
xMin: -10,
|
|
136
|
+
xMax: 10,
|
|
137
|
+
yMin: -10,
|
|
138
|
+
yMax: 10,
|
|
139
|
+
graphEquations: [
|
|
140
|
+
{ equation: 'y = x^2', color: '#e11d48', strokeWidth: 2 }
|
|
141
|
+
]
|
|
142
|
+
});
|
|
143
|
+
display.render(plane);
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
#### 5. Step-by-Step Solution
|
|
147
|
+
|
|
148
|
+
```javascript
|
|
149
|
+
import { omdEquationStack, omdEquationNode } from '@teachinglab/omd';
|
|
150
|
+
|
|
151
|
+
const steps = [
|
|
152
|
+
omdEquationNode.fromString('2x + 3 = 11'),
|
|
153
|
+
omdEquationNode.fromString('2x = 8'),
|
|
154
|
+
omdEquationNode.fromString('x = 4')
|
|
155
|
+
];
|
|
156
|
+
|
|
157
|
+
const stack = new omdEquationStack(steps, {
|
|
158
|
+
toolbar: true,
|
|
159
|
+
stepVisualizer: true
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
display.render(stack);
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Configuration
|
|
166
|
+
|
|
167
|
+
### Display Options
|
|
168
|
+
|
|
169
|
+
You can configure the display when creating it:
|
|
170
|
+
|
|
171
|
+
```javascript
|
|
172
|
+
const display = new omdDisplay(container, {
|
|
173
|
+
fontSize: 36,
|
|
174
|
+
centerContent: true,
|
|
175
|
+
fontFamily: 'Albert Sans'
|
|
176
|
+
});
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Global Configuration
|
|
180
|
+
|
|
181
|
+
OMD uses a global configuration manager:
|
|
182
|
+
|
|
183
|
+
```javascript
|
|
184
|
+
import { omdConfigManager } from '@teachinglab/omd';
|
|
185
|
+
|
|
186
|
+
// Update global settings
|
|
187
|
+
omdConfigManager.setConfig({
|
|
188
|
+
defaultFontSize: 32,
|
|
189
|
+
defaultColor: '#333333',
|
|
190
|
+
highlightColor: '#FFD700'
|
|
191
|
+
});
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Loading from JSON
|
|
195
|
+
|
|
196
|
+
Most OMD components can be loaded from JSON:
|
|
197
|
+
|
|
198
|
+
```javascript
|
|
199
|
+
import { omdTable } from '@teachinglab/omd';
|
|
200
|
+
|
|
201
|
+
const table = new omdTable();
|
|
202
|
+
table.loadFromJSON({
|
|
203
|
+
equation: "y = x^2",
|
|
204
|
+
headers: ["x", "y"],
|
|
205
|
+
xMin: -5,
|
|
206
|
+
xMax: 5,
|
|
207
|
+
stepSize: 1,
|
|
208
|
+
title: "Quadratic Function"
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
display.render(table);
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
See the [JSON Schemas documentation](../json-schemas.md) for complete JSON specifications.
|
|
215
|
+
|
|
216
|
+
## Using with Build Tools
|
|
217
|
+
|
|
218
|
+
### Vite
|
|
219
|
+
|
|
220
|
+
OMD works seamlessly with Vite:
|
|
221
|
+
|
|
222
|
+
```javascript
|
|
223
|
+
// main.js
|
|
224
|
+
import { omdDisplay } from '@teachinglab/omd';
|
|
225
|
+
|
|
226
|
+
const display = new omdDisplay(document.getElementById('app'));
|
|
227
|
+
display.render('2x + 3 = 11');
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Webpack
|
|
231
|
+
|
|
232
|
+
Configure Webpack to handle ES modules:
|
|
233
|
+
|
|
234
|
+
```javascript
|
|
235
|
+
// webpack.config.js
|
|
236
|
+
module.exports = {
|
|
237
|
+
// ... other config
|
|
238
|
+
resolve: {
|
|
239
|
+
extensions: ['.js']
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### React
|
|
245
|
+
|
|
246
|
+
OMD can be used with React using refs:
|
|
247
|
+
|
|
248
|
+
```jsx
|
|
249
|
+
import React, { useEffect, useRef } from 'react';
|
|
250
|
+
import { omdDisplay } from '@teachinglab/omd';
|
|
251
|
+
|
|
252
|
+
function MathComponent() {
|
|
253
|
+
const containerRef = useRef(null);
|
|
254
|
+
|
|
255
|
+
useEffect(() => {
|
|
256
|
+
if (containerRef.current) {
|
|
257
|
+
const display = new omdDisplay(containerRef.current);
|
|
258
|
+
display.render('2x + 3 = 11');
|
|
259
|
+
}
|
|
260
|
+
}, []);
|
|
261
|
+
|
|
262
|
+
return <div ref={containerRef} style={{ width: '100%', height: '400px' }} />;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export default MathComponent;
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## Next Steps
|
|
269
|
+
|
|
270
|
+
Now that you have OMD installed and working, explore these resources:
|
|
271
|
+
|
|
272
|
+
1. **[Visualizations Guide](./visualizations.md)** - Learn about all visual components
|
|
273
|
+
2. **[Equations Guide](./equations.md)** - Master equations and expressions
|
|
274
|
+
3. **[JSON Schemas](../json-schemas.md)** - Complete component reference
|
|
275
|
+
4. **[API Reference](../api/api-reference.md)** - Detailed API documentation
|
|
276
|
+
5. **[Examples](./quick-examples.md)** - More code examples
|
|
277
|
+
|
|
278
|
+
## Troubleshooting
|
|
279
|
+
|
|
280
|
+
### Module not found
|
|
281
|
+
|
|
282
|
+
If you get "Module not found" errors, ensure:
|
|
283
|
+
- OMD is installed: `npm install @teachinglab/omd`
|
|
284
|
+
- Your bundler supports ES modules
|
|
285
|
+
- Import paths are correct
|
|
286
|
+
|
|
287
|
+
### Display not rendering
|
|
288
|
+
|
|
289
|
+
If the display doesn't appear:
|
|
290
|
+
- Check that the container element exists in the DOM
|
|
291
|
+
- Ensure the container has width and height
|
|
292
|
+
- Check browser console for errors
|
|
293
|
+
|
|
294
|
+
### Style issues
|
|
295
|
+
|
|
296
|
+
For best results:
|
|
297
|
+
- Use `Albert Sans` font family
|
|
298
|
+
- Ensure adequate container dimensions
|
|
299
|
+
- Check that SVG rendering is supported in your browser
|
|
300
|
+
|
|
301
|
+
## Browser Support
|
|
302
|
+
|
|
303
|
+
OMD requires:
|
|
304
|
+
- Modern browser with ES6 support
|
|
305
|
+
- SVG rendering capabilities
|
|
306
|
+
- Native ES modules or a bundler
|
|
307
|
+
|
|
308
|
+
Tested on:
|
|
309
|
+
- Chrome 90+
|
|
310
|
+
- Firefox 88+
|
|
311
|
+
- Safari 14+
|
|
312
|
+
- Edge 90+
|
|
313
|
+
|
|
314
|
+
## Getting Help
|
|
315
|
+
|
|
316
|
+
- **GitHub Issues**: Report bugs or request features
|
|
317
|
+
- **Documentation**: Browse the complete [API Reference](../api/api-reference.md)
|
|
318
|
+
- **Examples**: Check the repository's `/examples` directory
|