@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
package/docs/index.md
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
# OMD Documentation
|
|
2
|
-
|
|
3
|
-
Welcome to the
|
|
4
|
-
|
|
5
|
-
## Getting Started
|
|
6
|
-
|
|
7
|
-
- [User Guide](user-guide.html) - Learn how to use OMD in your projects
|
|
8
|
-
- [API Reference](api-reference.html) - Complete API documentation
|
|
9
|
-
|
|
10
|
-
## API Documentation
|
|
11
|
-
|
|
12
|
-
### Core Classes
|
|
13
|
-
- [omdNode](api/omdNode.html) - Base node class
|
|
14
|
-
- [omdLeafNode](api/omdLeafNode.html) - Leaf nodes (numbers, variables)
|
|
15
|
-
- [omdGroupNode](api/omdGroupNode.html) - Group/container nodes
|
|
16
|
-
- [omdOperatorNode](api/omdOperatorNode.html) - Mathematical operators
|
|
17
|
-
- [omdFunctionNode](api/omdFunctionNode.html) - Function nodes
|
|
18
|
-
- [omdPowerNode](api/omdPowerNode.html) - Exponent/power nodes
|
|
19
|
-
- [omdRationalNode](api/omdRationalNode.html) - Fraction nodes
|
|
20
|
-
- [omdSqrtNode](api/omdSqrtNode.html) - Square root nodes
|
|
21
|
-
|
|
22
|
-
### Display & Visualization
|
|
23
|
-
- [omdStepVisualizer](api/omdStepVisualizer.html) - Step-by-step visualization
|
|
24
|
-
- [omdSimplification](api/omdSimplification.html) - Expression simplification
|
|
25
|
-
- [omdPopup](api/omdPopup.html) - Popup overlay system
|
|
26
|
-
|
|
27
|
-
### Utilities & Helpers
|
|
28
|
-
- [omdHelpers](api/omdHelpers.html) - Utility functions
|
|
29
|
-
- [eventManager](api/eventManager.html) - Event handling
|
|
30
|
-
- [focusFrameManager](api/focusFrameManager.html) - Focus frame management
|
|
31
|
-
- [configuration-options](api/configuration-options.html) - Configuration options
|
|
32
|
-
|
|
33
|
-
## Examples
|
|
34
|
-
|
|
35
|
-
Visit the [examples directory](../examples/index.html) to see OMD in action.
|
|
36
|
-
|
|
37
|
-
## Contributing
|
|
38
|
-
|
|
1
|
+
# OMD Documentation
|
|
2
|
+
|
|
3
|
+
Welcome to the On-screen Math Display (OMD) documentation.
|
|
4
|
+
|
|
5
|
+
## Getting Started
|
|
6
|
+
|
|
7
|
+
- [User Guide](user-guide.html) - Learn how to use OMD in your projects
|
|
8
|
+
- [API Reference](api-reference.html) - Complete API documentation
|
|
9
|
+
|
|
10
|
+
## API Documentation
|
|
11
|
+
|
|
12
|
+
### Core Classes
|
|
13
|
+
- [omdNode](api/omdNode.html) - Base node class
|
|
14
|
+
- [omdLeafNode](api/omdLeafNode.html) - Leaf nodes (numbers, variables)
|
|
15
|
+
- [omdGroupNode](api/omdGroupNode.html) - Group/container nodes
|
|
16
|
+
- [omdOperatorNode](api/omdOperatorNode.html) - Mathematical operators
|
|
17
|
+
- [omdFunctionNode](api/omdFunctionNode.html) - Function nodes
|
|
18
|
+
- [omdPowerNode](api/omdPowerNode.html) - Exponent/power nodes
|
|
19
|
+
- [omdRationalNode](api/omdRationalNode.html) - Fraction nodes
|
|
20
|
+
- [omdSqrtNode](api/omdSqrtNode.html) - Square root nodes
|
|
21
|
+
|
|
22
|
+
### Display & Visualization
|
|
23
|
+
- [omdStepVisualizer](api/omdStepVisualizer.html) - Step-by-step visualization
|
|
24
|
+
- [omdSimplification](api/omdSimplification.html) - Expression simplification
|
|
25
|
+
- [omdPopup](api/omdPopup.html) - Popup overlay system
|
|
26
|
+
|
|
27
|
+
### Utilities & Helpers
|
|
28
|
+
- [omdHelpers](api/omdHelpers.html) - Utility functions
|
|
29
|
+
- [eventManager](api/eventManager.html) - Event handling
|
|
30
|
+
- [focusFrameManager](api/focusFrameManager.html) - Focus frame management
|
|
31
|
+
- [configuration-options](api/configuration-options.html) - Configuration options
|
|
32
|
+
|
|
33
|
+
## Examples
|
|
34
|
+
|
|
35
|
+
Visit the [examples directory](../examples/index.html) to see OMD in action.
|
|
36
|
+
|
|
37
|
+
## Contributing
|
|
38
|
+
|
|
39
39
|
See the main [README](../readme.html) for information about contributing to OMD.
|
package/docs/omd-objects.md
CHANGED
|
@@ -1,258 +1,258 @@
|
|
|
1
|
-
# OMD Objects Reference (Verified)
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
This file documents the high-level JSON shapes accepted by the OMD classes and the low-level `Class().loadFromJSON(data)` APIs for each OMD visual. All shapes were verified against the code in `src/`.
|
|
5
|
-
|
|
6
|
-
Usage
|
|
7
|
-
- Instantiate the appropriate OMD class and call `loadFromJSON(...)` with the JSON object below.
|
|
8
|
-
- Many classes also accept a plain string where documented (e.g., expression/equation strings).
|
|
9
|
-
|
|
10
|
-
Notes
|
|
11
|
-
- Some components accept multiple, backward-compatible shapes (string, legacy fields, or structured objects). Where a field can be a string or structured object the docs indicate both.
|
|
12
|
-
- Field names shown are exactly as used by the source files.
|
|
13
|
-
|
|
14
|
-
----------------------------------------------------------------
|
|
15
|
-
COMMON: Expression / Terms / Number / Variable / Operator
|
|
16
|
-
----------------------------------------------------------------
|
|
17
|
-
Expression objects appear in several places; there are two common forms used across the codebase:
|
|
18
|
-
|
|
19
|
-
1) Compact expression string
|
|
20
|
-
- Example: `"2x + 5"`
|
|
21
|
-
- Many components accept a simple string which will be parsed (e.g., `omdExpression.loadFromJSON("2x+5")`).
|
|
22
|
-
|
|
23
|
-
2) Structured expression (preferred for programmatic usage)
|
|
24
|
-
- `expression` / `termsAndOpers` object form used by `omdExpression` and others:
|
|
25
|
-
|
|
26
|
-
{
|
|
27
|
-
// either a high-level expression object (terms) or the parsed low-level form
|
|
28
|
-
// Low-level parser output used in the codebase is `termsAndOpers`
|
|
29
|
-
"termsAndOpers": [
|
|
30
|
-
{ "omdType": "term", "coefficient": number, "variable"?: string, "exponent"?: number },
|
|
31
|
-
{ "omdType": "number", "value": number },
|
|
32
|
-
{ "omdType": "variable", "name": string },
|
|
33
|
-
{ "omdType": "operator", "operator": "+"|"-"|"/"|"÷"|"x"|"*"|"•"|"×"|"=" }
|
|
34
|
-
]
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
Legacy/alternate simple structured form used in some places (terms array):
|
|
38
|
-
{
|
|
39
|
-
"terms": [ { "coefficient"?: number, "variable"?: string, "value"?: number } ]
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
Primitive pieces
|
|
43
|
-
- number: `{ omdType: "number", value: number }` (low-level `omdNumber.loadFromJSON({ value })` accepts `{ value }`)
|
|
44
|
-
- variable: `{ omdType: "variable", name: string }` (low-level `omdVariable.loadFromJSON({ name })`)
|
|
45
|
-
- operator: `{ omdType: "operator", operator: "+"|"-"|"/"|"÷"|"x"|"*"|"•"|"×"|"=" }` (low-level `omdOperator.loadFromJSON({ operator })`)
|
|
46
|
-
- term: `{ omdType: "term", coefficient: number, variable?: string, exponent?: number }` (low-level `omdTerm.loadFromJSON` accepts `{ coefficient, variable?, exponent? }`)
|
|
47
|
-
|
|
48
|
-
Examples
|
|
49
|
-
- Number: `{ "omdType": "number", "value": 42 }`
|
|
50
|
-
- Term: `{ "omdType": "term", "coefficient": 3, "variable": "x", "exponent": 2 }`
|
|
51
|
-
- Expression string: `"2x + 3"`
|
|
52
|
-
- Expression structured: `{ "termsAndOpers": [ { "omdType": "term", "coefficient": 2, "variable": "x" }, { "omdType": "operator", "operator": "+" }, { "omdType": "number", "value": 3 } ] }`
|
|
53
|
-
|
|
54
|
-
----------------------------------------------------------------
|
|
55
|
-
SPECIFIC OBJECTS (by `omdType` / class)
|
|
56
|
-
----------------------------------------------------------------
|
|
57
|
-
-- omd (root container)
|
|
58
|
-
- The `omd` container class exists as a convenience to hold child visuals. To configure visuals, instantiate the specific class and call `loadFromJSON` on it.
|
|
59
|
-
|
|
60
|
-
- equation / `omdEquation`
|
|
61
|
-
High-level:
|
|
62
|
-
{ "omdType": "equation", "equation": string }
|
|
63
|
-
- `equation` string parsed if provided (preferred for simple cases).
|
|
64
|
-
|
|
65
|
-
Legacy / structured:
|
|
66
|
-
{ "omdType": "equation", "leftExpression": ExpressionObject, "rightExpression": ExpressionObject }
|
|
67
|
-
- Either side may be an `expression` string/structured object or a primitive `{ omdType: 'number'|... }`.
|
|
68
|
-
- `omdEquation.loadFromJSON` also accepts an `equation` string and will attempt to parse it into left/right.
|
|
69
|
-
|
|
70
|
-
- expression / `omdExpression`
|
|
71
|
-
- Accepts either a string (e.g., `"2x+5"`) or a structured object with `termsAndOpers` as shown above.
|
|
72
|
-
- Example: `{ "omdType": "expression", "termsAndOpers": [...] }` or simply `"2x + 5"`.
|
|
73
|
-
|
|
74
|
-
- number / `omdNumber`
|
|
75
|
-
- High-level: `{ "omdType": "number", "value": number }`
|
|
76
|
-
- Low-level: `loadFromJSON({ value: number })`
|
|
77
|
-
|
|
78
|
-
- variable / `omdVariable`
|
|
79
|
-
- `{ "omdType": "variable", "name": string }`
|
|
80
|
-
- `loadFromJSON({ name: string })`
|
|
81
|
-
|
|
82
|
-
- operator / `omdOperator`
|
|
83
|
-
- `{ "omdType": "operator", "operator": "+"|"-"|"/"|"÷"|"x"|"*"|"•"|"×"|"=" }`
|
|
84
|
-
- `loadFromJSON({ operator: "..." })` — note several symbols are normalized in code (e.g., `'*'` => `×`, `'-'` mapped to Unicode minus for display).
|
|
85
|
-
|
|
86
|
-
- term / `omdTerm`
|
|
87
|
-
- High-level: `{ "omdType": "term", "coefficient": number, "variable"?: string, "exponent"?: number }
|
|
88
|
-
- `loadFromJSON` accepts `{ coefficient, variable?, exponent? }`.
|
|
89
|
-
|
|
90
|
-
- powerExpression / `omdPowerExpression`
|
|
91
|
-
- Structured:
|
|
92
|
-
{
|
|
93
|
-
"omdType": "powerExpression",
|
|
94
|
-
"baseExpression": ExpressionObject, // object with omdType 'expression'|'number'|'variable'|'term' (or a string for expression)
|
|
95
|
-
"exponentExpression": ExpressionObject // same shape
|
|
96
|
-
}
|
|
97
|
-
- Note: `loadFromJSON` expects `baseExpression` and `exponentExpression` named fields (the code uses these names).
|
|
98
|
-
|
|
99
|
-
- rationalExpression / `omdRationalExpression`
|
|
100
|
-
- Structured:
|
|
101
|
-
{
|
|
102
|
-
"omdType": "rationalExpression",
|
|
103
|
-
"numeratorExpression": ExpressionObject,
|
|
104
|
-
"denominatorExpression": ExpressionObject
|
|
105
|
-
}
|
|
106
|
-
- Note: `loadFromJSON` expects `numeratorExpression` / `denominatorExpression` fields.
|
|
107
|
-
|
|
108
|
-
- function / `omdFunction`
|
|
109
|
-
- Structured:
|
|
110
|
-
{
|
|
111
|
-
"omdType": "function",
|
|
112
|
-
"name": string,
|
|
113
|
-
"inputVariables": [ string, ... ],
|
|
114
|
-
"expression": ExpressionObject
|
|
115
|
-
}
|
|
116
|
-
- Note: `inputVariables` is an array of variable names (strings).
|
|
117
|
-
|
|
118
|
-
- numberLine / `omdNumberLine`
|
|
119
|
-
- Structured:
|
|
120
|
-
{
|
|
121
|
-
"omdType": "numberLine",
|
|
122
|
-
"min": number,
|
|
123
|
-
"max": number,
|
|
124
|
-
"dotValues": [ number, ... ],
|
|
125
|
-
"label"?: string
|
|
126
|
-
}
|
|
127
|
-
- Note: `dotValues` is an array of positions for dots on the line.
|
|
128
|
-
|
|
129
|
-
- balanceHanger / `omdBalanceHanger`
|
|
130
|
-
- Structured:
|
|
131
|
-
{
|
|
132
|
-
"omdType": "balanceHanger",
|
|
133
|
-
"leftValues": [ number, ... ],
|
|
134
|
-
"rightValues": [ number, ... ],
|
|
135
|
-
"tilt"?: "left"|"right"
|
|
136
|
-
}
|
|
137
|
-
- Note: `leftValues`/`rightValues` are arrays of value numbers.
|
|
138
|
-
|
|
139
|
-
- tapeDiagram / `omdTapeDiagram` and `omdTapeLabel`
|
|
140
|
-
- Structured:
|
|
141
|
-
{
|
|
142
|
-
"omdType": "tapeDiagram",
|
|
143
|
-
"values": [ number, ... ],
|
|
144
|
-
"unitWidth": number,
|
|
145
|
-
"labelSet": [ { "omdType": "omdTapeLabel", "startIndex": number, "endIndex": number, "label": string, "showBelow"?: boolean } ]
|
|
146
|
-
}
|
|
147
|
-
- Note: `values` is an array of tape segment values.
|
|
148
|
-
|
|
149
|
-
- tileEquation / `omdTileEquation`
|
|
150
|
-
- Structured:
|
|
151
|
-
{
|
|
152
|
-
"omdType": "tileEquation",
|
|
153
|
-
"left": [ /* tileSpec */ ],
|
|
154
|
-
"right": [ /* tileSpec */ ]
|
|
155
|
-
}
|
|
156
|
-
- Note: `left`/`right` are arrays of tile specifications.
|
|
157
|
-
|
|
158
|
-
- numberTile / `omdNumberTile`
|
|
159
|
-
- Structured:
|
|
160
|
-
{
|
|
161
|
-
"omdType": "numberTile",
|
|
162
|
-
"value": number,
|
|
163
|
-
"size"?: "small"|"medium"|"large",
|
|
164
|
-
"dotsPerColumn"?: number
|
|
165
|
-
}
|
|
166
|
-
- Note: `size` and `dotsPerColumn` are optional.
|
|
167
|
-
|
|
168
|
-
- ratioChart / `omdRatioChart`
|
|
169
|
-
- Structured:
|
|
170
|
-
{
|
|
171
|
-
"omdType": "ratioChart",
|
|
172
|
-
"numerator": number,
|
|
173
|
-
"denominator": number,
|
|
174
|
-
"renderType"?: "pie"|"bar"
|
|
175
|
-
}
|
|
176
|
-
- Note: `renderType` specifies how to render the ratio.
|
|
177
|
-
|
|
178
|
-
- coordinatePlane / `omdCoordinatePlane`
|
|
179
|
-
- Structured:
|
|
180
|
-
{
|
|
181
|
-
"omdType": "coordinatePlane",
|
|
182
|
-
"xMin": number, "xMax": number,
|
|
183
|
-
"yMin": number, "yMax": number,
|
|
184
|
-
"graphEquations": [ { "equation": string, "color"?: string, "strokeWidth"?: number } ]
|
|
185
|
-
}
|
|
186
|
-
- Note: `graphEquations` is an array of equations to graph.
|
|
187
|
-
|
|
188
|
-
shapes (in `omdShapes.js`)
|
|
189
|
-
- rectangle, circle, ellipse, regularPolygon, rightTriangle, isoscelesTriangle — load shapes via their respective classes and `loadFromJSON` with the fields shown above.
|
|
190
|
-
|
|
191
|
-
spinner / `omdSpinner`
|
|
192
|
-
- Structured:
|
|
193
|
-
{
|
|
194
|
-
"omdType": "spinner",
|
|
195
|
-
"divisions": number,
|
|
196
|
-
"arrowPosition": number
|
|
197
|
-
}
|
|
198
|
-
- Note: `divisions` is the number of divisions on the spinner, `arrowPosition` is the initial position of the arrow.
|
|
199
|
-
|
|
200
|
-
table / `omdTable`
|
|
201
|
-
- See `omdTable` for fields like `headers`, `data`, `fontSize`, `cellHeight`, `backgroundColor`.
|
|
202
|
-
|
|
203
|
-
problem / `omdProblem`
|
|
204
|
-
- Structured:
|
|
205
|
-
{
|
|
206
|
-
"omdType": "problem",
|
|
207
|
-
"problemText": string,
|
|
208
|
-
"visualization": { /* forwarded object */ }
|
|
209
|
-
}
|
|
210
|
-
- Note: `visualization` forwards to the specific visualization object.
|
|
211
|
-
|
|
212
|
-
----------------------------------------------------------------
|
|
213
|
-
Examples (call `loadFromJSON` on instances)
|
|
214
|
-
----------------------------------------------------------------
|
|
215
|
-
|
|
216
|
-
1) Equation (string form)
|
|
217
|
-
|
|
218
|
-
```js
|
|
219
|
-
const eq = new omdEquation();
|
|
220
|
-
eq.loadFromJSON({ omdType: 'equation', equation: '2x + 3 = 11' });
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
2) Coordinate plane with a function
|
|
224
|
-
|
|
225
|
-
```js
|
|
226
|
-
const plane = new omdCoordinatePlane();
|
|
227
|
-
plane.loadFromJSON({
|
|
228
|
-
omdType: 'coordinatePlane',
|
|
229
|
-
xMin: -10, xMax: 10,
|
|
230
|
-
yMin: -10, yMax: 10,
|
|
231
|
-
graphEquations: [{ equation: 'y = x^2 - 4', color: '#e11d48', strokeWidth: 2 }]
|
|
232
|
-
});
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
3) Tape diagram (values)
|
|
236
|
-
|
|
237
|
-
```js
|
|
238
|
-
const tape = new omdTapeDiagram();
|
|
239
|
-
tape.loadFromJSON({ omdType: 'tapeDiagram', values: [1,2,3], unitWidth: 30, labelSet: [{ omdType: 'omdTapeLabel', startIndex: 0, endIndex: 3, label: '6', showBelow: true }] });
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
4) Number tile
|
|
243
|
-
|
|
244
|
-
```js
|
|
245
|
-
const tile = new omdNumberTile();
|
|
246
|
-
tile.loadFromJSON({ omdType: 'numberTile', value: 8, size: 'medium', dotsPerColumn: 10 });
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
----------------------------------------------------------------
|
|
250
|
-
Appendix / Implementation notes
|
|
251
|
-
- Parsers in `src/omdUtils.js` accept and normalize expression/equation strings into `termsAndOpers` arrays used by `omdExpression`.
|
|
252
|
-
- The codebase supports some legacy field names for backward compatibility; prefer the modern names documented here.
|
|
253
|
-
|
|
254
|
-
If you want, I can:
|
|
255
|
-
- Generate a one-line `loadFromJSON` example for every class in `src/` and insert them into this doc.
|
|
256
|
-
- Or run a script that extracts `loadFromJSON` parameter names from the source files to produce machine-readable JSON schema files.
|
|
257
|
-
Which would you like next?
|
|
258
|
-
|
|
1
|
+
# OMD Objects Reference (Verified)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
This file documents the high-level JSON shapes accepted by the OMD classes and the low-level `Class().loadFromJSON(data)` APIs for each OMD visual. All shapes were verified against the code in `src/`.
|
|
5
|
+
|
|
6
|
+
Usage
|
|
7
|
+
- Instantiate the appropriate OMD class and call `loadFromJSON(...)` with the JSON object below.
|
|
8
|
+
- Many classes also accept a plain string where documented (e.g., expression/equation strings).
|
|
9
|
+
|
|
10
|
+
Notes
|
|
11
|
+
- Some components accept multiple, backward-compatible shapes (string, legacy fields, or structured objects). Where a field can be a string or structured object the docs indicate both.
|
|
12
|
+
- Field names shown are exactly as used by the source files.
|
|
13
|
+
|
|
14
|
+
----------------------------------------------------------------
|
|
15
|
+
COMMON: Expression / Terms / Number / Variable / Operator
|
|
16
|
+
----------------------------------------------------------------
|
|
17
|
+
Expression objects appear in several places; there are two common forms used across the codebase:
|
|
18
|
+
|
|
19
|
+
1) Compact expression string
|
|
20
|
+
- Example: `"2x + 5"`
|
|
21
|
+
- Many components accept a simple string which will be parsed (e.g., `omdExpression.loadFromJSON("2x+5")`).
|
|
22
|
+
|
|
23
|
+
2) Structured expression (preferred for programmatic usage)
|
|
24
|
+
- `expression` / `termsAndOpers` object form used by `omdExpression` and others:
|
|
25
|
+
|
|
26
|
+
{
|
|
27
|
+
// either a high-level expression object (terms) or the parsed low-level form
|
|
28
|
+
// Low-level parser output used in the codebase is `termsAndOpers`
|
|
29
|
+
"termsAndOpers": [
|
|
30
|
+
{ "omdType": "term", "coefficient": number, "variable"?: string, "exponent"?: number },
|
|
31
|
+
{ "omdType": "number", "value": number },
|
|
32
|
+
{ "omdType": "variable", "name": string },
|
|
33
|
+
{ "omdType": "operator", "operator": "+"|"-"|"/"|"÷"|"x"|"*"|"•"|"×"|"=" }
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
Legacy/alternate simple structured form used in some places (terms array):
|
|
38
|
+
{
|
|
39
|
+
"terms": [ { "coefficient"?: number, "variable"?: string, "value"?: number } ]
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
Primitive pieces
|
|
43
|
+
- number: `{ omdType: "number", value: number }` (low-level `omdNumber.loadFromJSON({ value })` accepts `{ value }`)
|
|
44
|
+
- variable: `{ omdType: "variable", name: string }` (low-level `omdVariable.loadFromJSON({ name })`)
|
|
45
|
+
- operator: `{ omdType: "operator", operator: "+"|"-"|"/"|"÷"|"x"|"*"|"•"|"×"|"=" }` (low-level `omdOperator.loadFromJSON({ operator })`)
|
|
46
|
+
- term: `{ omdType: "term", coefficient: number, variable?: string, exponent?: number }` (low-level `omdTerm.loadFromJSON` accepts `{ coefficient, variable?, exponent? }`)
|
|
47
|
+
|
|
48
|
+
Examples
|
|
49
|
+
- Number: `{ "omdType": "number", "value": 42 }`
|
|
50
|
+
- Term: `{ "omdType": "term", "coefficient": 3, "variable": "x", "exponent": 2 }`
|
|
51
|
+
- Expression string: `"2x + 3"`
|
|
52
|
+
- Expression structured: `{ "termsAndOpers": [ { "omdType": "term", "coefficient": 2, "variable": "x" }, { "omdType": "operator", "operator": "+" }, { "omdType": "number", "value": 3 } ] }`
|
|
53
|
+
|
|
54
|
+
----------------------------------------------------------------
|
|
55
|
+
SPECIFIC OBJECTS (by `omdType` / class)
|
|
56
|
+
----------------------------------------------------------------
|
|
57
|
+
-- omd (root container)
|
|
58
|
+
- The `omd` container class exists as a convenience to hold child visuals. To configure visuals, instantiate the specific class and call `loadFromJSON` on it.
|
|
59
|
+
|
|
60
|
+
- equation / `omdEquation`
|
|
61
|
+
High-level:
|
|
62
|
+
{ "omdType": "equation", "equation": string }
|
|
63
|
+
- `equation` string parsed if provided (preferred for simple cases).
|
|
64
|
+
|
|
65
|
+
Legacy / structured:
|
|
66
|
+
{ "omdType": "equation", "leftExpression": ExpressionObject, "rightExpression": ExpressionObject }
|
|
67
|
+
- Either side may be an `expression` string/structured object or a primitive `{ omdType: 'number'|... }`.
|
|
68
|
+
- `omdEquation.loadFromJSON` also accepts an `equation` string and will attempt to parse it into left/right.
|
|
69
|
+
|
|
70
|
+
- expression / `omdExpression`
|
|
71
|
+
- Accepts either a string (e.g., `"2x+5"`) or a structured object with `termsAndOpers` as shown above.
|
|
72
|
+
- Example: `{ "omdType": "expression", "termsAndOpers": [...] }` or simply `"2x + 5"`.
|
|
73
|
+
|
|
74
|
+
- number / `omdNumber`
|
|
75
|
+
- High-level: `{ "omdType": "number", "value": number }`
|
|
76
|
+
- Low-level: `loadFromJSON({ value: number })`
|
|
77
|
+
|
|
78
|
+
- variable / `omdVariable`
|
|
79
|
+
- `{ "omdType": "variable", "name": string }`
|
|
80
|
+
- `loadFromJSON({ name: string })`
|
|
81
|
+
|
|
82
|
+
- operator / `omdOperator`
|
|
83
|
+
- `{ "omdType": "operator", "operator": "+"|"-"|"/"|"÷"|"x"|"*"|"•"|"×"|"=" }`
|
|
84
|
+
- `loadFromJSON({ operator: "..." })` — note several symbols are normalized in code (e.g., `'*'` => `×`, `'-'` mapped to Unicode minus for display).
|
|
85
|
+
|
|
86
|
+
- term / `omdTerm`
|
|
87
|
+
- High-level: `{ "omdType": "term", "coefficient": number, "variable"?: string, "exponent"?: number }
|
|
88
|
+
- `loadFromJSON` accepts `{ coefficient, variable?, exponent? }`.
|
|
89
|
+
|
|
90
|
+
- powerExpression / `omdPowerExpression`
|
|
91
|
+
- Structured:
|
|
92
|
+
{
|
|
93
|
+
"omdType": "powerExpression",
|
|
94
|
+
"baseExpression": ExpressionObject, // object with omdType 'expression'|'number'|'variable'|'term' (or a string for expression)
|
|
95
|
+
"exponentExpression": ExpressionObject // same shape
|
|
96
|
+
}
|
|
97
|
+
- Note: `loadFromJSON` expects `baseExpression` and `exponentExpression` named fields (the code uses these names).
|
|
98
|
+
|
|
99
|
+
- rationalExpression / `omdRationalExpression`
|
|
100
|
+
- Structured:
|
|
101
|
+
{
|
|
102
|
+
"omdType": "rationalExpression",
|
|
103
|
+
"numeratorExpression": ExpressionObject,
|
|
104
|
+
"denominatorExpression": ExpressionObject
|
|
105
|
+
}
|
|
106
|
+
- Note: `loadFromJSON` expects `numeratorExpression` / `denominatorExpression` fields.
|
|
107
|
+
|
|
108
|
+
- function / `omdFunction`
|
|
109
|
+
- Structured:
|
|
110
|
+
{
|
|
111
|
+
"omdType": "function",
|
|
112
|
+
"name": string,
|
|
113
|
+
"inputVariables": [ string, ... ],
|
|
114
|
+
"expression": ExpressionObject
|
|
115
|
+
}
|
|
116
|
+
- Note: `inputVariables` is an array of variable names (strings).
|
|
117
|
+
|
|
118
|
+
- numberLine / `omdNumberLine`
|
|
119
|
+
- Structured:
|
|
120
|
+
{
|
|
121
|
+
"omdType": "numberLine",
|
|
122
|
+
"min": number,
|
|
123
|
+
"max": number,
|
|
124
|
+
"dotValues": [ number, ... ],
|
|
125
|
+
"label"?: string
|
|
126
|
+
}
|
|
127
|
+
- Note: `dotValues` is an array of positions for dots on the line.
|
|
128
|
+
|
|
129
|
+
- balanceHanger / `omdBalanceHanger`
|
|
130
|
+
- Structured:
|
|
131
|
+
{
|
|
132
|
+
"omdType": "balanceHanger",
|
|
133
|
+
"leftValues": [ number, ... ],
|
|
134
|
+
"rightValues": [ number, ... ],
|
|
135
|
+
"tilt"?: "left"|"right"
|
|
136
|
+
}
|
|
137
|
+
- Note: `leftValues`/`rightValues` are arrays of value numbers.
|
|
138
|
+
|
|
139
|
+
- tapeDiagram / `omdTapeDiagram` and `omdTapeLabel`
|
|
140
|
+
- Structured:
|
|
141
|
+
{
|
|
142
|
+
"omdType": "tapeDiagram",
|
|
143
|
+
"values": [ number, ... ],
|
|
144
|
+
"unitWidth": number,
|
|
145
|
+
"labelSet": [ { "omdType": "omdTapeLabel", "startIndex": number, "endIndex": number, "label": string, "showBelow"?: boolean } ]
|
|
146
|
+
}
|
|
147
|
+
- Note: `values` is an array of tape segment values.
|
|
148
|
+
|
|
149
|
+
- tileEquation / `omdTileEquation`
|
|
150
|
+
- Structured:
|
|
151
|
+
{
|
|
152
|
+
"omdType": "tileEquation",
|
|
153
|
+
"left": [ /* tileSpec */ ],
|
|
154
|
+
"right": [ /* tileSpec */ ]
|
|
155
|
+
}
|
|
156
|
+
- Note: `left`/`right` are arrays of tile specifications.
|
|
157
|
+
|
|
158
|
+
- numberTile / `omdNumberTile`
|
|
159
|
+
- Structured:
|
|
160
|
+
{
|
|
161
|
+
"omdType": "numberTile",
|
|
162
|
+
"value": number,
|
|
163
|
+
"size"?: "small"|"medium"|"large",
|
|
164
|
+
"dotsPerColumn"?: number
|
|
165
|
+
}
|
|
166
|
+
- Note: `size` and `dotsPerColumn` are optional.
|
|
167
|
+
|
|
168
|
+
- ratioChart / `omdRatioChart`
|
|
169
|
+
- Structured:
|
|
170
|
+
{
|
|
171
|
+
"omdType": "ratioChart",
|
|
172
|
+
"numerator": number,
|
|
173
|
+
"denominator": number,
|
|
174
|
+
"renderType"?: "pie"|"bar"
|
|
175
|
+
}
|
|
176
|
+
- Note: `renderType` specifies how to render the ratio.
|
|
177
|
+
|
|
178
|
+
- coordinatePlane / `omdCoordinatePlane`
|
|
179
|
+
- Structured:
|
|
180
|
+
{
|
|
181
|
+
"omdType": "coordinatePlane",
|
|
182
|
+
"xMin": number, "xMax": number,
|
|
183
|
+
"yMin": number, "yMax": number,
|
|
184
|
+
"graphEquations": [ { "equation": string, "color"?: string, "strokeWidth"?: number } ]
|
|
185
|
+
}
|
|
186
|
+
- Note: `graphEquations` is an array of equations to graph.
|
|
187
|
+
|
|
188
|
+
shapes (in `omdShapes.js`)
|
|
189
|
+
- rectangle, circle, ellipse, regularPolygon, rightTriangle, isoscelesTriangle — load shapes via their respective classes and `loadFromJSON` with the fields shown above.
|
|
190
|
+
|
|
191
|
+
spinner / `omdSpinner`
|
|
192
|
+
- Structured:
|
|
193
|
+
{
|
|
194
|
+
"omdType": "spinner",
|
|
195
|
+
"divisions": number,
|
|
196
|
+
"arrowPosition": number
|
|
197
|
+
}
|
|
198
|
+
- Note: `divisions` is the number of divisions on the spinner, `arrowPosition` is the initial position of the arrow.
|
|
199
|
+
|
|
200
|
+
table / `omdTable`
|
|
201
|
+
- See `omdTable` for fields like `headers`, `data`, `fontSize`, `cellHeight`, `backgroundColor`.
|
|
202
|
+
|
|
203
|
+
problem / `omdProblem`
|
|
204
|
+
- Structured:
|
|
205
|
+
{
|
|
206
|
+
"omdType": "problem",
|
|
207
|
+
"problemText": string,
|
|
208
|
+
"visualization": { /* forwarded object */ }
|
|
209
|
+
}
|
|
210
|
+
- Note: `visualization` forwards to the specific visualization object.
|
|
211
|
+
|
|
212
|
+
----------------------------------------------------------------
|
|
213
|
+
Examples (call `loadFromJSON` on instances)
|
|
214
|
+
----------------------------------------------------------------
|
|
215
|
+
|
|
216
|
+
1) Equation (string form)
|
|
217
|
+
|
|
218
|
+
```js
|
|
219
|
+
const eq = new omdEquation();
|
|
220
|
+
eq.loadFromJSON({ omdType: 'equation', equation: '2x + 3 = 11' });
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
2) Coordinate plane with a function
|
|
224
|
+
|
|
225
|
+
```js
|
|
226
|
+
const plane = new omdCoordinatePlane();
|
|
227
|
+
plane.loadFromJSON({
|
|
228
|
+
omdType: 'coordinatePlane',
|
|
229
|
+
xMin: -10, xMax: 10,
|
|
230
|
+
yMin: -10, yMax: 10,
|
|
231
|
+
graphEquations: [{ equation: 'y = x^2 - 4', color: '#e11d48', strokeWidth: 2 }]
|
|
232
|
+
});
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
3) Tape diagram (values)
|
|
236
|
+
|
|
237
|
+
```js
|
|
238
|
+
const tape = new omdTapeDiagram();
|
|
239
|
+
tape.loadFromJSON({ omdType: 'tapeDiagram', values: [1,2,3], unitWidth: 30, labelSet: [{ omdType: 'omdTapeLabel', startIndex: 0, endIndex: 3, label: '6', showBelow: true }] });
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
4) Number tile
|
|
243
|
+
|
|
244
|
+
```js
|
|
245
|
+
const tile = new omdNumberTile();
|
|
246
|
+
tile.loadFromJSON({ omdType: 'numberTile', value: 8, size: 'medium', dotsPerColumn: 10 });
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
----------------------------------------------------------------
|
|
250
|
+
Appendix / Implementation notes
|
|
251
|
+
- Parsers in `src/omdUtils.js` accept and normalize expression/equation strings into `termsAndOpers` arrays used by `omdExpression`.
|
|
252
|
+
- The codebase supports some legacy field names for backward compatibility; prefer the modern names documented here.
|
|
253
|
+
|
|
254
|
+
If you want, I can:
|
|
255
|
+
- Generate a one-line `loadFromJSON` example for every class in `src/` and insert them into this doc.
|
|
256
|
+
- Or run a script that extracts `loadFromJSON` parameter names from the source files to produce machine-readable JSON schema files.
|
|
257
|
+
Which would you like next?
|
|
258
|
+
|