@teachinglab/omd 0.1.4 → 0.1.6

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 (47) hide show
  1. package/canvas/tools/EraserTool.js +1 -1
  2. package/canvas/tools/PencilTool.js +1 -1
  3. package/canvas/tools/SelectTool.js +1 -1
  4. package/docs/api/configuration-options.md +198 -104
  5. package/docs/api/eventManager.md +83 -68
  6. package/docs/api/focusFrameManager.md +145 -150
  7. package/docs/api/index.md +106 -91
  8. package/docs/api/main.md +63 -58
  9. package/docs/api/omdBinaryExpressionNode.md +86 -227
  10. package/docs/api/omdCanvas.md +84 -142
  11. package/docs/api/omdConfigManager.md +113 -192
  12. package/docs/api/omdConstantNode.md +53 -117
  13. package/docs/api/omdDisplay.md +87 -121
  14. package/docs/api/omdEquationNode.md +174 -161
  15. package/docs/api/omdEquationSequenceNode.md +259 -301
  16. package/docs/api/omdEquationStack.md +157 -103
  17. package/docs/api/omdFunctionNode.md +83 -141
  18. package/docs/api/omdGroupNode.md +79 -182
  19. package/docs/api/omdHelpers.md +88 -96
  20. package/docs/api/omdLeafNode.md +86 -163
  21. package/docs/api/omdNode.md +202 -101
  22. package/docs/api/omdOperationDisplayNode.md +118 -139
  23. package/docs/api/omdOperatorNode.md +92 -127
  24. package/docs/api/omdParenthesisNode.md +134 -122
  25. package/docs/api/omdPopup.md +192 -117
  26. package/docs/api/omdPowerNode.md +132 -127
  27. package/docs/api/omdRationalNode.md +145 -128
  28. package/docs/api/omdSimplification.md +79 -110
  29. package/docs/api/omdSqrtNode.md +144 -79
  30. package/docs/api/omdStepVisualizer.md +147 -115
  31. package/docs/api/omdStepVisualizerHighlighting.md +66 -61
  32. package/docs/api/omdStepVisualizerInteractiveSteps.md +109 -129
  33. package/docs/api/omdStepVisualizerLayout.md +71 -60
  34. package/docs/api/omdStepVisualizerTextBoxes.md +77 -68
  35. package/docs/api/omdToolbar.md +131 -102
  36. package/docs/api/omdTranscriptionService.md +96 -76
  37. package/docs/api/omdTreeDiff.md +170 -134
  38. package/docs/api/omdUnaryExpressionNode.md +137 -174
  39. package/docs/api/omdUtilities.md +83 -70
  40. package/docs/api/omdVariableNode.md +123 -148
  41. package/index.js +2 -2
  42. package/omd/core/index.js +9 -0
  43. package/omd/nodes/omdEquationSequenceNode.js +15 -0
  44. package/omd/utils/aiNextEquationStep.js +106 -0
  45. package/package.json +1 -1
  46. package/src/omdBalanceHanger.js +1 -1
  47. package/src/omdCoordinatePlane.js +1 -1
@@ -1,301 +1,259 @@
1
- # omdEquationSequenceNode
2
-
3
- Represents a sequence of equations for step-by-step calculations. This node manages the layout of multiple equations, ensuring their equals signs are vertically aligned for readability. It's particularly useful for displaying mathematical problem-solving sequences where each step builds on the previous one.
4
-
5
- ## Class: `omdEquationSequenceNode extends omdNode`
6
-
7
- ```javascript
8
- import { omdEquationSequenceNode } from './omd/nodes/omdEquationSequenceNode.js';
9
- ```
10
-
11
- ### Constructor
12
-
13
- ```javascript
14
- new omdEquationSequenceNode(steps)
15
- ```
16
-
17
- **Parameters:**
18
- - `steps` {Array<omdEquationNode>} - An array of `omdEquationNode` objects representing the sequence of equations.
19
-
20
- ### Static Methods
21
-
22
- #### `fromStringArray(stepStrings)`
23
- Creates an `omdEquationSequenceNode` instance from an array of equation strings.
24
-
25
- ```javascript
26
- const sequence = omdEquationSequenceNode.fromStringArray([
27
- '2x + 4 = 10',
28
- '2x = 6',
29
- 'x = 3'
30
- ]);
31
- ```
32
- - **Parameters:**
33
- - `stepStrings` {Array<string>} - Array of strings, each representing an equation step.
34
- - **Returns:** `omdEquationSequenceNode` A new instance.
35
- - **Throws:** Error if any string is not a valid equation (must contain '=').
36
-
37
- ---
38
-
39
- #### `fromSteps(stepsArray)`
40
- Creates a sequence from an array of expression strings (can be equations or expressions).
41
-
42
- ```javascript
43
- const sequence = omdEquationSequenceNode.fromSteps([
44
- '2x + 4 = 10',
45
- 'x = 3'
46
- ]);
47
- ```
48
- - **Parameters:**
49
- - `stepsArray` {Array<string>} - Array of expression strings.
50
- - **Returns:** `omdEquationSequenceNode` A new sequence node.
51
-
52
- ### Properties
53
-
54
- Inherits all properties from [`omdNode`](./omdNode.md), plus:
55
-
56
- #### `steps`
57
- - **Type:** `Array<omdNode>`
58
- - **Description:** Array of nodes representing each step in the sequence.
59
-
60
- #### `currentStepIndex`
61
- - **Type:** `number`
62
- - **Description:** Index of the currently active step (0-based).
63
-
64
- #### `stepDescriptions`
65
- - **Type:** `Array<string>`
66
- - **Description:** Optional descriptions for each step.
67
-
68
- #### `importanceLevels`
69
- - **Type:** `Array<number>`
70
- - **Description:** Importance levels for filtering steps (0 = major, 1 = intermediate, 2 = minor).
71
-
72
- #### `currentFilterLevels`
73
- - **Type:** `Array<number>`
74
- - **Description:** Currently active filter levels for step visibility.
75
-
76
- ### Methods
77
-
78
- Inherits all methods from [`omdNode`](./omdNode.md), plus:
79
-
80
- #### `addStep(step, descriptionOrOptions, importance)`
81
- Adds a new step to the sequence.
82
-
83
- ```javascript
84
- // Using options object
85
- sequence.addStep(equationNode, {
86
- description: 'Subtract 4 from both sides',
87
- stepMark: 0
88
- });
89
-
90
- // Using separate parameters
91
- sequence.addStep(equationNode, 'Subtract 4 from both sides', 0);
92
-
93
- // Using string (will be parsed)
94
- sequence.addStep('x = 3', 'Final result', 0);
95
- ```
96
- - **Parameters:**
97
- - `step` {omdNode|string} - The node object or expression string for the step.
98
- - `descriptionOrOptions` {Object|string} - Options object or description string.
99
- - `importance` {number} - Importance level (0-2) if using string description.
100
- - **Returns:** `number` The index of the added step.
101
-
102
- ---
103
-
104
- #### `getCurrentEquation()`
105
- Gets the last equation in the sequence (the current working equation).
106
- - **Returns:** `omdEquationNode|null` The last equation, or null if no equations exist.
107
-
108
- ---
109
-
110
- #### `getCurrentStep()`
111
- Gets the current step node based on `currentStepIndex`.
112
- - **Returns:** `omdNode|null` The current step node.
113
-
114
- ---
115
-
116
- #### `applyEquationOperation(value, operation)`
117
- Applies a specified operation to the current equation and adds the result as a new step.
118
-
119
- ```javascript
120
- sequence.applyEquationOperation(4, 'subtract'); // Subtract 4 from both sides
121
- sequence.applyEquationOperation(2, 'divide'); // Divide both sides by 2
122
- ```
123
- - **Parameters:**
124
- - `value` {number|string} - The constant value or expression string to apply.
125
- - `operation` {string} - The operation: 'add', 'subtract', 'multiply', or 'divide'.
126
- - **Returns:** `omdEquationSequenceNode` Returns this sequence for chaining.
127
-
128
- ---
129
-
130
- #### `setFilterLevel(level)`
131
- Sets the filter level for visible steps in the sequence.
132
-
133
- ```javascript
134
- sequence.setFilterLevel(0); // Show only major steps
135
- sequence.setFilterLevel(1); // Show only intermediate steps
136
- ```
137
- - **Parameters:**
138
- - `level` {number} - The stepMark level to show (default: 0 for major steps).
139
-
140
- ---
141
-
142
- #### `setFilterLevels(levels)`
143
- Sets multiple filter levels for visible steps.
144
-
145
- ```javascript
146
- sequence.setFilterLevels([0, 1]); // Show major and intermediate steps
147
- ```
148
- - **Parameters:**
149
- - `levels` {Array<number>} - Array of stepMark levels to show.
150
-
151
- ---
152
-
153
- #### `updateStepsVisibility(filterFunction)`
154
- Updates the visibility of steps based on a filter function.
155
-
156
- ```javascript
157
- sequence.updateStepsVisibility(step => step.stepMark <= 1); // Show steps with importance 0 or 1
158
- ```
159
- - **Parameters:**
160
- - `filterFunction` {Function} - Function that returns true for visible steps.
161
-
162
- ---
163
-
164
- #### `recordSimplificationHistory(name, affectedNodes, message, metadata)`
165
- Records a simplification step in the history.
166
-
167
- ```javascript
168
- sequence.recordSimplificationHistory(
169
- 'Combine Like Terms',
170
- ['node1', 'node2'],
171
- 'Combined 2x and 3x to get 5x',
172
- { ruleType: 'arithmetic' }
173
- );
174
- ```
175
- - **Parameters:**
176
- - `name` {string} - Name of the simplification rule.
177
- - `affectedNodes` {Array<string>} - Array of node IDs affected.
178
- - `message` {string} - Human-readable description.
179
- - `metadata` {Object} - Additional metadata (optional).
180
-
181
- ---
182
-
183
- #### `getSimplificationHistory()`
184
- Gets the complete simplification history for this sequence.
185
- - **Returns:** `Array<Object>` Array of simplification history entries.
186
-
187
- ---
188
-
189
- #### `clearSimplificationHistory()`
190
- Clears the simplification history.
191
-
192
- ---
193
-
194
- #### `rebuildNodeMap()`
195
- Rebuilds the internal node map used for tracking all nodes in the sequence.
196
-
197
- ---
198
-
199
- #### `findAllNodes()`
200
- Finds all nodes contained within this sequence.
201
- - **Returns:** `Array<omdNode>` Array of all contained nodes.
202
-
203
- ---
204
-
205
- #### `clear()`
206
- Clears all steps from the sequence.
207
-
208
- ```javascript
209
- sequence.clear(); // Removes all steps and resets the sequence
210
- ```
211
-
212
- ---
213
-
214
- #### `clone()`
215
- Creates a deep clone of the sequence node.
216
- - **Returns:** `omdEquationSequenceNode` A new, identical instance.
217
-
218
- ---
219
-
220
- #### `toString()`
221
- Converts the entire sequence to a multi-line string.
222
- - **Returns:** `string` Multi-line string representation of all steps.
223
-
224
- ---
225
-
226
- #### `setFontSize(fontSize)`
227
- Sets the font size for the sequence and propagates to all steps.
228
- - **Parameters:**
229
- - `fontSize` {number} - The new font size.
230
-
231
- ### Static Properties
232
-
233
- #### `OPERATION_MAP`
234
- Maps operation names to equation methods.
235
-
236
- ```javascript
237
- {
238
- 'add': 'addToBothSides',
239
- 'subtract': 'subtractFromBothSides',
240
- 'multiply': 'multiplyBothSides',
241
- 'divide': 'divideBothSides'
242
- }
243
- ```
244
-
245
- ### Example Usage
246
-
247
- ```javascript
248
- // Create a sequence from equation strings
249
- const sequence = omdEquationSequenceNode.fromStringArray([
250
- '2x + 4 = 10'
251
- ]);
252
-
253
- // Add steps using operations
254
- sequence.applyEquationOperation(4, 'subtract') // 2x + 4 - 4 = 10 - 4 2x = 6
255
- .applyEquationOperation(2, 'divide'); // 2x ÷ 2 = 6 ÷ 2 → x = 3
256
-
257
- // Filter to show only major steps
258
- sequence.setFilterLevel(0);
259
-
260
- // Add a custom step with description
261
- const finalStep = omdEquationNode.fromString('x = 3');
262
- sequence.addStep(finalStep, {
263
- description: 'Solution found',
264
- stepMark: 0
265
- });
266
-
267
- // Get the solution
268
- console.log(sequence.getCurrentEquation().toString()); // "x = 3"
269
-
270
- // View the complete sequence
271
- console.log(sequence.toString());
272
- ```
273
-
274
- ### Advanced Example: Step Filtering
275
-
276
- ```javascript
277
- const sequence = new omdEquationSequenceNode([]);
278
-
279
- // Add steps with different importance levels
280
- sequence.addStep('2x + 4 = 10', 'Original equation', 0); // Major step
281
- sequence.addStep('2x + 4 - 4 = 10 - 4', 'Subtract 4', 1); // Intermediate step
282
- sequence.addStep('2x = 6', 'Simplified', 0); // Major step
283
- sequence.addStep('2x ÷ 2 = 6 ÷ 2', 'Divide by 2', 1); // Intermediate step
284
- sequence.addStep('x = 3', 'Final answer', 0); // Major step
285
-
286
- // Show only major steps (0)
287
- sequence.setFilterLevel(0); // Shows: 2x + 4 = 10, 2x = 6, x = 3
288
-
289
- // Show major and intermediate steps
290
- sequence.setFilterLevels([0, 1]); // Shows all steps
291
-
292
- // Custom filtering
293
- sequence.updateStepsVisibility(step => step.stepMark === 0); // Only major steps
294
- ```
295
-
296
- ### See Also
297
-
298
- - [`omdEquationNode`](./omdEquationNode.md) - Individual equation representation.
299
- - [`omdStepVisualizer`](./omdStepVisualizer.md) - Visual step tracker extending this class.
300
- - [`omdOperationDisplayNode`](./omdOperationDisplayNode.md) - For displaying operation steps.
301
- - [`omdNode`](./omdNode.md) - The base class for all nodes.
1
+ # omdEquationSequenceNode
2
+
3
+ Represents a sequence of equations or mathematical expressions, designed for step-by-step calculations and visual problem-solving. This node manages the vertical layout of multiple steps, ensuring elements like equals signs are vertically aligned for readability. It also provides robust provenance tracking, simplification capabilities, and filtering options for displaying different levels of detail.
4
+
5
+ ## Class Definition
6
+
7
+ ```javascript
8
+ export class omdEquationSequenceNode extends omdNode
9
+ ```
10
+
11
+ ## Constructor
12
+
13
+ ### `new omdEquationSequenceNode(steps)`
14
+
15
+ Creates a new `omdEquationSequenceNode` instance.
16
+
17
+ - **`steps`** (`Array<omdNode>`): An initial array of `omdNode` objects (typically `omdEquationNode` or `omdOperationDisplayNode`) representing the sequence of steps.
18
+
19
+ Upon construction, the sequence initializes its internal state, sets up layout helpers, and builds a comprehensive node map for provenance tracking across all steps.
20
+
21
+ ## Static Properties
22
+
23
+ ### `OPERATION_MAP`
24
+
25
+ A static map that links common operation names (e.g., `'add'`) to the corresponding method names on `omdEquationNode` (e.g., `'addToBothSides'`).
26
+
27
+ ```javascript
28
+ {
29
+ 'add': 'addToBothSides',
30
+ 'subtract': 'subtractFromBothSides',
31
+ 'multiply': 'multiplyBothSides',
32
+ 'divide': 'divideBothSides',
33
+ }
34
+ ```
35
+
36
+ ## Static Methods
37
+
38
+ ### `fromStringArray(stepStrings)`
39
+
40
+ Creates an `omdEquationSequenceNode` instance from an array of equation strings. Each string must contain an equals sign (`=`).
41
+
42
+ - **`stepStrings`** (`Array<string>`): An array of strings, each representing an equation step.
43
+ - **Returns**: `omdEquationSequenceNode` - A new instance.
44
+ - **Throws**: `Error` if any string is not a valid equation (e.g., missing `=` or invalid format).
45
+
46
+ ### `fromSteps(stepsArray)`
47
+
48
+ Creates an `omdEquationSequenceNode` instance from an array of expression strings. This method is more flexible than `fromStringArray` as it can parse both full equations (containing `=`) and general mathematical expressions.
49
+
50
+ - **`stepsArray`** (`Array<string>`): An array of expression strings.
51
+ - **Returns**: `omdEquationSequenceNode` - A new sequence node.
52
+
53
+ ## Public Properties
54
+
55
+ - **`steps`** (`Array<omdNode>`): An array of `omdNode` objects representing each step in the sequence.
56
+ - **`currentStepIndex`** (`number`): The 0-based index of the currently active step. Default: `0`.
57
+ - **`stepDescriptions`** (`Array<string>`): An array storing optional human-readable descriptions for each step.
58
+ - **`importanceLevels`** (`Array<number>`): An array storing the importance level (0, 1, or 2) for each step, used for filtering.
59
+ - **`currentFilterLevels`** (`Array<number>`): An array of numbers representing the currently active importance levels for step visibility. Default: `[0]`.
60
+ - **`defaultEquationBackground`** (`object` | `null`): An object defining a default background style to be applied to all `omdEquationNode` steps added to the sequence.
61
+
62
+ ## Public Methods
63
+
64
+ ### `getCurrentEquation()`
65
+
66
+ Retrieves the last `omdEquationNode` in the sequence, which typically represents the current working equation.
67
+
68
+ - **Returns**: `omdEquationNode` | `null` - The last equation, or `null` if no equations exist.
69
+
70
+ ### `getCurrentStep()`
71
+
72
+ Retrieves the currently active step node based on `currentStepIndex` and visibility. It prioritizes visible equation nodes.
73
+
74
+ - **Returns**: `omdNode` | `null` - The current step node.
75
+
76
+ ### `addStep(step, descriptionOrOptions, importance)`
77
+
78
+ Adds a new step to the sequence. This method supports multiple signatures:
79
+
80
+ - `addStep(omdNode, optionsObject)`
81
+ - `addStep(omdNode, descriptionString, importanceNumber)`
82
+ - `addStep(expressionString, optionsObject)`
83
+ - `addStep(expressionString, descriptionString, importanceNumber)`
84
+
85
+ - **`step`** (`omdNode` | `string`): The `omdNode` object or an expression string for the step.
86
+ - **`descriptionOrOptions`** (`object` | `string`, optional): An options object (e.g., `{ description: '...', stepMark: 0 }`) or a description string.
87
+ - **`importance`** (`number`, optional): The importance level (0, 1, or 2) if `descriptionOrOptions` is a string.
88
+ - **Returns**: `number` - The index of the added step.
89
+
90
+ ### `setDefaultEquationBackground(style)`
91
+
92
+ Sets a default background style that will be applied to all new `omdEquationNode` steps added to the sequence. It also applies the style to existing `omdEquationNode` steps immediately.
93
+
94
+ - **`style`** (`object`): An object defining the background style (e.g., `{ backgroundColor: '#f0f0f0', cornerRadius: 8, pill: true }`).
95
+
96
+ ### `rebuildNodeMap()`
97
+
98
+ Rebuilds the internal `nodeMap`, which is a comprehensive map of all `omdNode` instances within the entire sequence, including historical nodes referenced in provenance chains. This is crucial for accurate highlighting and provenance tracking.
99
+
100
+ ### `recordSimplificationHistory(name, affectedNodes, message, metadata)`
101
+
102
+ Records a simplification step in the sequence's history.
103
+
104
+ - **`name`** (`string`): The name of the simplification rule applied.
105
+ - **`affectedNodes`** (`Array<string>`): An array of node IDs that were affected by the simplification.
106
+ - **`message`** (`string`): A human-readable description of the simplification.
107
+ - **`metadata`** (`object`, optional): Additional metadata about the simplification.
108
+
109
+ ### `getSimplificationHistory()`
110
+
111
+ Retrieves the complete simplification history for this sequence.
112
+
113
+ - **Returns**: `Array<object>` - An array of simplification history entries.
114
+
115
+ ### `clearSimplificationHistory()`
116
+
117
+ Clears all recorded simplification history entries.
118
+
119
+ ### `setFontSize(fontSize)`
120
+
121
+ Sets the font size for the entire sequence and propagates this setting to all individual steps. This triggers a re-computation of dimensions and layout.
122
+
123
+ - **`fontSize`** (`number`): The new font size in pixels.
124
+
125
+ ### `applyEquationOperation(value, operation)`
126
+
127
+ Applies a specified arithmetic operation to the current equation in the sequence and adds the result as a new step. This method also adds an `omdOperationDisplayNode` to visually represent the operation.
128
+
129
+ - **`value`** (`number` | `string`): The constant value or expression string to apply.
130
+ - **`operation`** (`string`): The operation name (`'add'`, `'subtract'`, `'multiply'`, `'divide'`).
131
+ - **Returns**: `omdEquationSequenceNode` - Returns this sequence instance for chaining.
132
+
133
+ ### `applyEquationFunction(functionName)`
134
+
135
+ Applies a mathematical function (e.g., `'sqrt'`, `'log'`) to both sides of the current equation in the sequence and adds the result as a new step.
136
+
137
+ - **`functionName`** (`string`): The name of the function to apply.
138
+ - **Returns**: `omdEquationSequenceNode` - Returns this sequence instance for chaining.
139
+
140
+ ### `simplify()`
141
+
142
+ Applies one round of simplification rules to the last step in the sequence. If simplifications are applied, a new step is added to the sequence.
143
+
144
+ - **Returns**: `object` - A result object containing `success` (boolean), `foldedCount` (number of operations applied), `isFinalSimplification` (boolean), and `message` (string).
145
+
146
+ ### `simplifyAll(maxIterations)`
147
+
148
+ Repeatedly calls `simplify()` until no more simplifications can be applied or `maxIterations` is reached. This adds multiple simplification steps to the sequence.
149
+
150
+ - **`maxIterations`** (`number`, optional): Maximum number of iterations to prevent infinite loops. Default: `50`.
151
+ - **Returns**: `object` - A result object containing `success`, `totalSteps`, `iterations`, and `message`.
152
+
153
+ ### `evaluate(variables)`
154
+
155
+ Evaluates the current step in the sequence with the given variables and logs the result to the console.
156
+
157
+ - **`variables`** (`object`): A map of variable names to their numeric values.
158
+
159
+ ### `validateSequenceProvenance()`
160
+
161
+ Validates the integrity of provenance tracking across all steps in the sequence.
162
+
163
+ - **Returns**: `Array<object>` - An array of validation issues found.
164
+
165
+ ### `select()` / `deselect()` / `highlight(color)` / `clearProvenanceHighlights()`
166
+
167
+ These methods override the default `omdNode` behavior. The `omdEquationSequenceNode` itself does not highlight or respond to selection events directly. Instead, these methods propagate the calls to their child steps, allowing individual steps to be highlighted or selected.
168
+
169
+ ### `computeDimensions()`
170
+
171
+ Calculates the overall dimensions (width and height) of the entire sequence, determining the correct alignment point for all equals signs.
172
+
173
+ ### `updateLayout()`
174
+
175
+ Positions each step vertically and aligns their equals signs to the calculated alignment point, ensuring a clean, readable layout.
176
+
177
+ ### `toMathJSNode()`
178
+
179
+ Converts the sequence to a math.js-compatible AST node. Currently, this returns the AST of the last step in the sequence.
180
+
181
+ - **Returns**: `object` - A math.js AST node.
182
+
183
+ ### `navigateToStep(index)`
184
+
185
+ Navigates to a specific step in the sequence by setting `currentStepIndex`.
186
+
187
+ - **`index`** (`number`): The 0-based index of the step to navigate to.
188
+ - **Returns**: `boolean` - `true` if navigation was successful.
189
+
190
+ ### `nextStep()`
191
+
192
+ Navigates to the next step in the sequence.
193
+
194
+ - **Returns**: `boolean` - `true` if there was a next step.
195
+
196
+ ### `previousStep()`
197
+
198
+ Navigates to the previous step in the sequence.
199
+
200
+ - **Returns**: `boolean` - `true` if there was a previous step.
201
+
202
+ ### `getFilteredSteps(maxImportance)`
203
+
204
+ Retrieves steps filtered by their importance level.
205
+
206
+ - **`maxImportance`** (`number`): The maximum importance level to include (0, 1, or 2).
207
+ - **Returns**: `Array<object>` - An array of objects, each containing `step`, `description`, `importance`, and `index`.
208
+
209
+ ### `renderCurrentStep()`
210
+
211
+ Renders only the current step of the sequence.
212
+
213
+ - **Returns**: `SVGElement` - The SVG representation of the current step.
214
+
215
+ ### `toString()`
216
+
217
+ Converts the entire sequence to a multi-line string representation, including step descriptions.
218
+
219
+ - **Returns**: `string` - Multi-line string of all steps.
220
+
221
+ ### `clear()`
222
+
223
+ Removes all steps from the sequence, clears all associated data (descriptions, importance levels, history), and resets the sequence to its initial state.
224
+
225
+ ### `show()` / `hide()`
226
+
227
+ Overrides `omdNode`'s `show()` and `hide()` to also update the visibility of the layout manager.
228
+
229
+ ### `updateStepsVisibility(visibilityPredicate)`
230
+
231
+ Updates the visibility of multiple steps at once based on a provided predicate function. Also applies font weights based on `stepMark`.
232
+
233
+ - **`visibilityPredicate`** (`Function`): A function that takes a step node and returns `true` if it should be visible, `false` otherwise.
234
+
235
+ ## Internal Methods
236
+
237
+ - **`_initializeState()`**: Initializes internal state variables like `currentStepIndex`, `stepDescriptions`, etc.
238
+ - **`_initializeLayout()`**: Sets up the `jsvgLayoutGroup` for vertical arrangement.
239
+ - **`_initializeNodeMap()`**: Initializes the `nodeMap` and calls `rebuildNodeMap()`.
240
+ - **`_disableContainerInteractions()`**: Disables default mouse interactions on the sequence container.
241
+ - **`_markInitialSteps()`**: Marks the initial steps with a default `stepMark` of 0.
242
+ - **`_applyDefaultFilter()`**: Applies the default filter (showing only level 0 steps) upon initialization.
243
+ - **`_reapplyCurrentFilter()`**: Reapplies the currently set filter levels to ensure consistent visibility.
244
+ - **`_determineStepMark(step, options)`**: Determines the appropriate `stepMark` for a new step.
245
+ - **`_isFullySimplified(step)`**: Heuristic to check if an equation step appears fully simplified.
246
+ - **`_isSimpleExpression(node)`**: Heuristic to check if an expression is simple (constant, variable, or simple operations).
247
+ - **`preserveProvenanceHistory(newNodeMap)`**: Ensures historical nodes referenced in provenance chains are preserved in the `nodeMap`.
248
+ - **`_collectAllProvenanceIds(newNodeMap)`**: Collects all provenance IDs from nodes in the `newNodeMap`.
249
+ - **`_collectNodeProvenanceIds(node, referencedIds, processedNodes)`**: Recursively collects provenance IDs for a given node.
250
+ - **`_preserveReferencedNodes(referencedIds, newNodeMap)`**: Preserves nodes referenced by `referencedIds` in the `newNodeMap`.
251
+ - **`_preserveNodeAndContext(id, newNodeMap, processedIds)`**: Preserves a node and its parent/sibling context.
252
+ - **`_preserveParentContext(node, newNodeMap)`**: Preserves the parent context of a node.
253
+ - **`_preserveSiblingContext(node, newNodeMap)`**: Preserves the sibling context of a node.
254
+ - **`_handleSuccessfulSimplification(originalStep, simplificationResult)`**: Handles the result of a successful simplification, adding a new step and recording history.
255
+ - **`_getOperationDescription(operation, value, isUnsimplified)`**: Generates a human-readable description for an equation operation.
256
+ - **`_calculateAlignmentPoint(visibleSteps)`**: Calculates the optimal X-coordinate for aligning equals signs across all visible steps.
257
+ - **`_calculateTotalDimensions(visibleSteps)`**: Calculates the total width and height of the sequence.
258
+ - **`_computeStepXOffset(step)`**: Computes the horizontal offset needed to align a step within the sequence.
259
+ - **`_stringToNode(str)`**: Converts an expression string into an `omdNode` (either `omdEquationNode` or a general expression node).