@teachinglab/omd 0.2.10 → 0.3.1

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.
Files changed (58) hide show
  1. package/docs/api/configuration-options.md +198 -198
  2. package/docs/api/eventManager.md +82 -82
  3. package/docs/api/focusFrameManager.md +144 -144
  4. package/docs/api/index.md +105 -105
  5. package/docs/api/main.md +62 -62
  6. package/docs/api/omdBinaryExpressionNode.md +86 -86
  7. package/docs/api/omdCanvas.md +83 -83
  8. package/docs/api/omdConfigManager.md +112 -112
  9. package/docs/api/omdConstantNode.md +52 -52
  10. package/docs/api/omdDisplay.md +87 -87
  11. package/docs/api/omdEquationNode.md +174 -174
  12. package/docs/api/omdEquationSequenceNode.md +258 -258
  13. package/docs/api/omdEquationStack.md +156 -156
  14. package/docs/api/omdFunctionNode.md +82 -82
  15. package/docs/api/omdGroupNode.md +78 -78
  16. package/docs/api/omdHelpers.md +87 -87
  17. package/docs/api/omdLeafNode.md +85 -85
  18. package/docs/api/omdNode.md +201 -201
  19. package/docs/api/omdOperationDisplayNode.md +117 -117
  20. package/docs/api/omdOperatorNode.md +91 -91
  21. package/docs/api/omdParenthesisNode.md +133 -133
  22. package/docs/api/omdPopup.md +191 -191
  23. package/docs/api/omdPowerNode.md +131 -131
  24. package/docs/api/omdRationalNode.md +144 -144
  25. package/docs/api/omdSimplification.md +78 -78
  26. package/docs/api/omdSqrtNode.md +144 -144
  27. package/docs/api/omdStepVisualizer.md +146 -146
  28. package/docs/api/omdStepVisualizerHighlighting.md +65 -65
  29. package/docs/api/omdStepVisualizerInteractiveSteps.md +108 -108
  30. package/docs/api/omdStepVisualizerLayout.md +70 -70
  31. package/docs/api/omdStepVisualizerTextBoxes.md +76 -76
  32. package/docs/api/omdTranscriptionService.md +95 -95
  33. package/docs/api/omdTreeDiff.md +169 -169
  34. package/docs/api/omdUnaryExpressionNode.md +137 -137
  35. package/docs/api/omdUtilities.md +82 -82
  36. package/docs/api/omdVariableNode.md +123 -123
  37. package/omd/nodes/omdConstantNode.js +141 -141
  38. package/omd/nodes/omdGroupNode.js +67 -67
  39. package/omd/nodes/omdLeafNode.js +76 -76
  40. package/omd/nodes/omdOperatorNode.js +108 -108
  41. package/omd/nodes/omdParenthesisNode.js +292 -292
  42. package/omd/nodes/omdPowerNode.js +235 -235
  43. package/omd/nodes/omdRationalNode.js +295 -295
  44. package/omd/nodes/omdVariableNode.js +122 -122
  45. package/omd/simplification/omdSimplification.js +140 -140
  46. package/omd/step-visualizer/omdStepVisualizer.js +947 -947
  47. package/omd/step-visualizer/omdStepVisualizerLayout.js +892 -892
  48. package/omd/utils/omdStepVisualizerInteractiveSteps.js +5 -3
  49. package/package.json +1 -1
  50. package/src/index.js +11 -0
  51. package/src/omdBalanceHanger.js +2 -1
  52. package/src/omdEquation.js +1 -1
  53. package/src/omdNumber.js +1 -1
  54. package/src/omdNumberLine.js +13 -7
  55. package/src/omdRatioChart.js +11 -0
  56. package/src/omdShapes.js +1 -1
  57. package/src/omdTapeDiagram.js +1 -1
  58. package/src/omdTerm.js +1 -1
@@ -1,88 +1,88 @@
1
- # omdHelpers
2
-
3
- `omdHelpers` is a collection of convenience functions designed to simplify common tasks when working with the OMD library. These helpers abstract away underlying complexities, making it easier to create and manipulate mathematical expressions and visualizations.
4
-
5
- ## Overview
6
-
7
- The `omdHelpers` object is exported from the main `omd/core/index.js` entry point, making its functions readily available for use in your project.
8
-
9
- ## Functions
10
-
11
- ### `createNodeFromExpression(expression, mathInstance)`
12
-
13
- Creates an `omdNode` instance from a string representation of a mathematical expression. This function parses the expression using the provided math.js instance and instantiates the appropriate `omdNode` subclass.
14
-
15
- - **`expression`** (`string`): The mathematical expression as a string (e.g., `"x^2 + 2x + 1"`).
16
- - **`mathInstance`** (`object`): The math.js instance to use for parsing the expression (e.g., `window.math`).
17
- - **Returns**: `omdNode` - The root `omdNode` of the created expression tree.
18
-
19
- ```javascript
20
- import { omdHelpers } from '@teachinglab/omd';
21
- // Assuming math.js is loaded globally as window.math
22
-
23
- const expressionNode = omdHelpers.createNodeFromExpression('2x + 5', window.math);
24
- // expressionNode will be an instance of omdBinaryExpressionNode or another omdNode subclass
25
- ```
26
-
27
- ### `createEquation(equationString)`
28
-
29
- Creates an `omdEquationNode` instance from a string representation of an equation. This is a specialized helper for equations, ensuring proper parsing and node creation.
30
-
31
- - **`equationString`** (`string`): The equation as a string (e.g., `"x + 2 = 5"`).
32
- - **Returns**: `omdEquationNode` - The created `omdEquationNode`.
33
-
34
- ```javascript
35
- import { omdHelpers } from '@teachinglab/omd';
36
-
37
- const equation = omdHelpers.createEquation('3y - 7 = 14');
38
- // equation will be an instance of omdEquationNode
39
- ```
40
-
41
- ### `createStepVisualizer(equationStrings)`
42
-
43
- Creates an `omdStepVisualizer` instance from an array of equation strings. This is useful for quickly setting up a step-by-step solution display.
44
-
45
- - **`equationStrings`** (`Array<string>`): An array of strings, where each string represents an equation step (e.g., `["2x = 10", "x = 5"]`).
46
- - **Returns**: `omdStepVisualizer` - The created `omdStepVisualizer` instance.
47
-
48
- ```javascript
49
- import { omdHelpers } from '@teachinglab/omd';
50
-
51
- const steps = [
52
- '4x + 8 = 20',
53
- '4x = 12',
54
- 'x = 3'
55
- ];
56
- const visualizer = omdHelpers.createStepVisualizer(steps);
57
- // visualizer will be an instance of omdStepVisualizer
58
- ```
59
-
60
- ## Example Usage
61
-
62
- ```javascript
63
- import { omdDisplay, omdHelpers } from '@teachinglab/omd';
64
- // Assuming math.js is loaded globally as window.math
65
-
66
- // Get a container element (assuming it exists in your HTML)
67
- const container = document.getElementById('math-display-area');
68
-
69
- // Create an expression node using a helper
70
- const expression = omdHelpers.createNodeFromExpression('a^2 + b^2', window.math);
71
-
72
- // Create an equation using a helper
73
- const equation = omdHelpers.createEquation('E = mc^2');
74
-
75
- // Create a step visualizer using a helper
76
- const solutionSteps = [
77
- 'x + 5 = 10',
78
- 'x = 5'
79
- ];
80
- const stepVisualizer = omdHelpers.createStepVisualizer(solutionSteps);
81
-
82
- // You can then render these nodes using omdDisplay or omdCanvas
83
- const display = new omdDisplay(container);
84
- display.render(expression);
85
-
86
- // Or for the step visualizer
87
- // display.render(stepVisualizer);
1
+ # omdHelpers
2
+
3
+ `omdHelpers` is a collection of convenience functions designed to simplify common tasks when working with the OMD library. These helpers abstract away underlying complexities, making it easier to create and manipulate mathematical expressions and visualizations.
4
+
5
+ ## Overview
6
+
7
+ The `omdHelpers` object is exported from the main `omd/core/index.js` entry point, making its functions readily available for use in your project.
8
+
9
+ ## Functions
10
+
11
+ ### `createNodeFromExpression(expression, mathInstance)`
12
+
13
+ Creates an `omdNode` instance from a string representation of a mathematical expression. This function parses the expression using the provided math.js instance and instantiates the appropriate `omdNode` subclass.
14
+
15
+ - **`expression`** (`string`): The mathematical expression as a string (e.g., `"x^2 + 2x + 1"`).
16
+ - **`mathInstance`** (`object`): The math.js instance to use for parsing the expression (e.g., `window.math`).
17
+ - **Returns**: `omdNode` - The root `omdNode` of the created expression tree.
18
+
19
+ ```javascript
20
+ import { omdHelpers } from '@teachinglab/omd';
21
+ // Assuming math.js is loaded globally as window.math
22
+
23
+ const expressionNode = omdHelpers.createNodeFromExpression('2x + 5', window.math);
24
+ // expressionNode will be an instance of omdBinaryExpressionNode or another omdNode subclass
25
+ ```
26
+
27
+ ### `createEquation(equationString)`
28
+
29
+ Creates an `omdEquationNode` instance from a string representation of an equation. This is a specialized helper for equations, ensuring proper parsing and node creation.
30
+
31
+ - **`equationString`** (`string`): The equation as a string (e.g., `"x + 2 = 5"`).
32
+ - **Returns**: `omdEquationNode` - The created `omdEquationNode`.
33
+
34
+ ```javascript
35
+ import { omdHelpers } from '@teachinglab/omd';
36
+
37
+ const equation = omdHelpers.createEquation('3y - 7 = 14');
38
+ // equation will be an instance of omdEquationNode
39
+ ```
40
+
41
+ ### `createStepVisualizer(equationStrings)`
42
+
43
+ Creates an `omdStepVisualizer` instance from an array of equation strings. This is useful for quickly setting up a step-by-step solution display.
44
+
45
+ - **`equationStrings`** (`Array<string>`): An array of strings, where each string represents an equation step (e.g., `["2x = 10", "x = 5"]`).
46
+ - **Returns**: `omdStepVisualizer` - The created `omdStepVisualizer` instance.
47
+
48
+ ```javascript
49
+ import { omdHelpers } from '@teachinglab/omd';
50
+
51
+ const steps = [
52
+ '4x + 8 = 20',
53
+ '4x = 12',
54
+ 'x = 3'
55
+ ];
56
+ const visualizer = omdHelpers.createStepVisualizer(steps);
57
+ // visualizer will be an instance of omdStepVisualizer
58
+ ```
59
+
60
+ ## Example Usage
61
+
62
+ ```javascript
63
+ import { omdDisplay, omdHelpers } from '@teachinglab/omd';
64
+ // Assuming math.js is loaded globally as window.math
65
+
66
+ // Get a container element (assuming it exists in your HTML)
67
+ const container = document.getElementById('math-display-area');
68
+
69
+ // Create an expression node using a helper
70
+ const expression = omdHelpers.createNodeFromExpression('a^2 + b^2', window.math);
71
+
72
+ // Create an equation using a helper
73
+ const equation = omdHelpers.createEquation('E = mc^2');
74
+
75
+ // Create a step visualizer using a helper
76
+ const solutionSteps = [
77
+ 'x + 5 = 10',
78
+ 'x = 5'
79
+ ];
80
+ const stepVisualizer = omdHelpers.createStepVisualizer(solutionSteps);
81
+
82
+ // You can then render these nodes using omdDisplay or omdCanvas
83
+ const display = new omdDisplay(container);
84
+ display.render(expression);
85
+
86
+ // Or for the step visualizer
87
+ // display.render(stepVisualizer);
88
88
  ```
@@ -1,86 +1,86 @@
1
- # omdLeafNode
2
-
3
- Represents a base class for all leaf nodes in the OMD expression tree, such as constants, variables, operators, and grouping symbols. This class provides fundamental functionalities for handling text content, computing dimensions, and managing layout for single-element nodes.
4
-
5
- ## Class Definition
6
-
7
- ```javascript
8
- export class omdLeafNode extends omdNode
9
- ```
10
-
11
- ## Constructor
12
-
13
- ### `new omdLeafNode(astNodeData)`
14
-
15
- Creates a new `omdLeafNode` instance. This is an abstract base class; you should use its concrete subclasses (e.g., `omdConstantNode`, `omdVariableNode`) instead.
16
-
17
- - **`astNodeData`** (`object`): The abstract syntax tree (AST) node data from a parser like math.js, containing information relevant to the leaf node.
18
-
19
- ## Public Properties
20
-
21
- - **`textElement`** (`jsvgTextLine`): The internal `jsvgTextLine` instance that renders the text content of the leaf node.
22
-
23
- ## Public Methods
24
-
25
- ### `clone()`
26
-
27
- Creates a deep clone of the leaf node. This method uses the original node's constructor to create a new instance, ensuring that the correct subclass is instantiated. The clone's `provenance` array is updated to include the original node's ID.
28
-
29
- - **Returns**: `omdLeafNode` - A new instance of the specific leaf node subclass.
30
-
31
- ### `updateTextElement(text)`
32
-
33
- Updates the text content displayed by the node's `textElement`. After updating the text, you typically need to call `computeDimensions()` and `updateLayout()` to reflect the change visually.
34
-
35
- - **`text`** (`string` | `number`): The new text content to display.
36
-
37
- ### `computeDimensions()`
38
-
39
- Calculates the dimensions (width and height) of the node based on its text content and current font size. It uses the `getTextBounds` utility function to accurately measure the text. This method also updates the font size of the internal `textElement`.
40
-
41
- - **Overrides**: `omdNode.computeDimensions()`.
42
-
43
- ### `updateLayout()`
44
-
45
- Updates the position of the node's internal text element to center it within the node's bounding box. This method primarily calls the internal `updateTextPosition()`.
46
-
47
- - **Overrides**: `omdNode.updateLayout()`.
48
-
49
- ## Internal Methods
50
-
51
- - **`createTextElement(text)`**: Creates and initializes a `jsvgTextLine` element with the given text. It sets the text anchor to `'middle'` and dominant baseline to `'middle'` for proper centering, and adds it as a child of this node.
52
- - **Returns**: `jsvgTextLine` - The created text element.
53
- - **`updateTextPosition()`**: Positions the `textElement` at the center of the node's calculated width and height.
54
-
55
- ## Example
56
-
57
- ```javascript
58
- // omdLeafNode is an abstract class—use concrete subclasses
59
- import { omdConstantNode } from './omdConstantNode.js';
60
- import { omdVariableNode } from './omdVariableNode.js';
61
- import { omdOperatorNode } from './omdOperatorNode.js';
62
-
63
- const constant = new omdConstantNode({ value: 5 });
64
- const variable = new omdVariableNode({ name: 'x' });
65
- const operator = new omdOperatorNode({ op: '+' });
66
-
67
- // All leaf nodes handle text rendering and layout similarly
68
- constant.initialize(); // Computes dimensions and layout
69
- variable.initialize();
70
- operator.initialize();
71
-
72
- // You can then add these to an omdDisplay or other container
73
- ```
74
-
75
- ## See Also
76
-
77
- Concrete implementations:
78
-
79
- - [`omdConstantNode`](./omdConstantNode.md) - For numeric values.
80
- - [`omdVariableNode`](./omdVariableNode.md) - For variables.
81
- - [`omdOperatorNode`](./omdOperatorNode.md) - For operators.
82
- - [`omdGroupNode`](./omdGroupNode.md) - For grouping symbols.
83
-
84
- Base class:
85
-
1
+ # omdLeafNode
2
+
3
+ Represents a base class for all leaf nodes in the OMD expression tree, such as constants, variables, operators, and grouping symbols. This class provides fundamental functionalities for handling text content, computing dimensions, and managing layout for single-element nodes.
4
+
5
+ ## Class Definition
6
+
7
+ ```javascript
8
+ export class omdLeafNode extends omdNode
9
+ ```
10
+
11
+ ## Constructor
12
+
13
+ ### `new omdLeafNode(astNodeData)`
14
+
15
+ Creates a new `omdLeafNode` instance. This is an abstract base class; you should use its concrete subclasses (e.g., `omdConstantNode`, `omdVariableNode`) instead.
16
+
17
+ - **`astNodeData`** (`object`): The abstract syntax tree (AST) node data from a parser like math.js, containing information relevant to the leaf node.
18
+
19
+ ## Public Properties
20
+
21
+ - **`textElement`** (`jsvgTextLine`): The internal `jsvgTextLine` instance that renders the text content of the leaf node.
22
+
23
+ ## Public Methods
24
+
25
+ ### `clone()`
26
+
27
+ Creates a deep clone of the leaf node. This method uses the original node's constructor to create a new instance, ensuring that the correct subclass is instantiated. The clone's `provenance` array is updated to include the original node's ID.
28
+
29
+ - **Returns**: `omdLeafNode` - A new instance of the specific leaf node subclass.
30
+
31
+ ### `updateTextElement(text)`
32
+
33
+ Updates the text content displayed by the node's `textElement`. After updating the text, you typically need to call `computeDimensions()` and `updateLayout()` to reflect the change visually.
34
+
35
+ - **`text`** (`string` | `number`): The new text content to display.
36
+
37
+ ### `computeDimensions()`
38
+
39
+ Calculates the dimensions (width and height) of the node based on its text content and current font size. It uses the `getTextBounds` utility function to accurately measure the text. This method also updates the font size of the internal `textElement`.
40
+
41
+ - **Overrides**: `omdNode.computeDimensions()`.
42
+
43
+ ### `updateLayout()`
44
+
45
+ Updates the position of the node's internal text element to center it within the node's bounding box. This method primarily calls the internal `updateTextPosition()`.
46
+
47
+ - **Overrides**: `omdNode.updateLayout()`.
48
+
49
+ ## Internal Methods
50
+
51
+ - **`createTextElement(text)`**: Creates and initializes a `jsvgTextLine` element with the given text. It sets the text anchor to `'middle'` and dominant baseline to `'middle'` for proper centering, and adds it as a child of this node.
52
+ - **Returns**: `jsvgTextLine` - The created text element.
53
+ - **`updateTextPosition()`**: Positions the `textElement` at the center of the node's calculated width and height.
54
+
55
+ ## Example
56
+
57
+ ```javascript
58
+ // omdLeafNode is an abstract class—use concrete subclasses
59
+ import { omdConstantNode } from './omdConstantNode.js';
60
+ import { omdVariableNode } from './omdVariableNode.js';
61
+ import { omdOperatorNode } from './omdOperatorNode.js';
62
+
63
+ const constant = new omdConstantNode({ value: 5 });
64
+ const variable = new omdVariableNode({ name: 'x' });
65
+ const operator = new omdOperatorNode({ op: '+' });
66
+
67
+ // All leaf nodes handle text rendering and layout similarly
68
+ constant.initialize(); // Computes dimensions and layout
69
+ variable.initialize();
70
+ operator.initialize();
71
+
72
+ // You can then add these to an omdDisplay or other container
73
+ ```
74
+
75
+ ## See Also
76
+
77
+ Concrete implementations:
78
+
79
+ - [`omdConstantNode`](./omdConstantNode.md) - For numeric values.
80
+ - [`omdVariableNode`](./omdVariableNode.md) - For variables.
81
+ - [`omdOperatorNode`](./omdOperatorNode.md) - For operators.
82
+ - [`omdGroupNode`](./omdGroupNode.md) - For grouping symbols.
83
+
84
+ Base class:
85
+
86
86
  - [`omdNode`](./omdNode.md) - The fundamental base class for all OMD nodes.