# Interface: Series Packed monitor samples over one shared time axis and element axis. ## Remarks `values` is signal-major. Convert a signal, frame, and element to an index with: ```ts signal * time.length * elementCount + frame * elementCount + element ``` `validFrames` lets append-heavy callers load a preallocated buffer before all frames are ready. After writing more samples, call [Monitor.extend](Monitor.md#extend) to commit the new frame frontier. ## Example ```ts const series: Series = { time: Float64Array.from([0, 1, 2]), values: new Float32Array(1 * 3 * 2), signalCount: 1, elementCount: 2, validFrames: 0, }; series.values[0 * 3 * 2 + 0 * 2 + 0] = 0.25; ``` ## Properties | Property | Modifier | Type | Description | | :------ | :------ | :------ | :------ | | `elementCount` | `readonly` | `number` | Number of elements sampled at each frame. | | `ranges?` | `readonly` | `Float32Array`\<`ArrayBufferLike`\> | Optional per-signal min/max pairs: `[min0, max0, min1, max1, ...]`. | | `signalCount` | `readonly` | `number` | Number of independent signals stored in `Series.values`. | | `time` | `readonly` | `Float32Array`\<`ArrayBufferLike`\> \| `Float64Array`\<`ArrayBufferLike`\> | Time coordinate for each frame. | | `validFrames?` | `readonly` | `number` | Number of frames ready to draw; omit to treat the whole series as committed. | | `values` | `readonly` | `Float32Array` | Packed f32 samples for every signal, frame, and element. |