v0.8.9

Improved CodecPipeline error behaviour for unknown messages

refactor

When the CodecPipeline can't find a match for a message it can now optionally passthroughNoMatch, warn (the default), or error.

v0.8.8

Updated to Electron 11.3.0

chore

The template now runs Electron 11.3.0.

Reduced allocations for binary protocol

refactor

The binary protocol now has reduced allocations resulting in lower garbage collection pressure and better performance.

v0.8.7

Fix for handshake screen not being full height

bug

In some circumstances the handshake loading screen wouldn't be full height, this is now fixed.

v0.8.6

Prevent multiple clicks on Connection Cards

bug

Connection cards without a loading screen can no longer be clicked multiple times to skip to the device page.

Process Type Log

feat

Each process console will now display in the console what process type it is.

Only warn on unidentified messageIDs for codecs

refactor

By default, if the codec pipeline can't encode or decode a packet, it will warn instead of throwing an error.

Printer inline styling

feat

Printers now allow for inline styling via the style prop.

Improved Printer Performance

feat

Printers are now imperatively updated, avoiding a React render loop, increasing performance for frequent updates.

v0.8.5

TriggerDomain time accessor

bug

The TriggerDomain accessor is now passed the current time.

v0.8.4

Fixed dll building

bug

A package was preventing the shared dll from building, this is now resolved.

v0.8.3

Scale accessor for 3D ControlledGroup

feat

The ControlledGroup component now supports scale being modified by hardware.

v0.8.2

3D Renderer

feat

3D Renderer components. Read the docs here.

v0.8.1

Hook Intellisense documentation

docs

All hooks now have intellisense documentation inline.

v0.8.0

Loggers have access to accessors

feat

CSV and other loggers have access to accessors now.

New Data Transformer API

refactorBREAKING

The Data Transformer API has been revamped.

Improved Chart Performance

refactor

Charts of all types now allocate less and are therefore more performant.

Microsecond timing

featBREAKING

Timing is now done using a global @electricui/timing package, and is now accurate to the microsecond instead of the millisecond.

Chart Axis Performance Improvements

refactor

Chart Axes are now more performant to render.

X-Y Plots

feat

X-Y Plots are now supported.

Better hot reloading

refactorBREAKING

Hot reloading, especially on the transport context, has been improved.

The logic for this has been moved to @electricui/core, and may now be updated without modifying the template.

Interval requester

refactorBREAKING

Interval Requesters no longer retry forever if messages don't reach hardware. They now attempt up to acceptableConsecutiveFailures=10 times before giving up.

v0.7.34

Regression fix for builds

bug

Builds had a regression where the app-builder binary wasn't marked as executable. This has been fixed.

v0.7.33

LineChart color fix

bug

Fixed a regression in the automatic colors functionality for LineCharts.

v0.7.32

Next channel now follows latest

bug

If a release on latest is ahead of one on next, the next channel will use the latest release.

v0.7.31

NodeUSB linux regression

bug

On the upcoming Electron v11 branch, NodeUSB wouldn't build, this has been rectified.

v0.7.30

THREE colourspace correction discrepancy resolved

bug

Removes automatic colour space management which caused an incorrect shift on input colours (as they were in the correct colourspace to begin with).

LineChart lines now support opacity

feat

The opacity prop accepts a number from 0 to 1 to control line translucency.

v0.7.29

Custom connections page 'no devices' text

feat

Allows custom control over the text displayed when no devices could be found during search.

Pass a noDevicesText string into the Connections component to modify the default.

v0.7.28

v0.7.27

VerticalAxis Tick count & Tick values properties added

feat

VerticalAxis (y axis) now supports a tickCount property to explictly control the number of vertically drawn ticks.

tickValues allows manually setting an explicit set of tick values.

TimeAxis Tick count control

feat

TimeAxis (x axis) now supports a tickCount property to explictly control the number of horizontally drawn ticks.

v0.7.26

node-abi update for Electron v11

chore

node-abi update.

Test coverage for dynamic RealTimeDomain window (xaxis) resizing

test

Test coverage to prevent regressions

Fixed RealTimeDomain window auto-range selection issue

bug

The RealTimeDomain property window accepts an array of window timescales to allow the LineChart to automatically increase it's x-axis domain over longer periods.

It was incorrectly only using the smallest window in the array. It should now auto-range across the array values correctly.

Thick Line shader refactor

refactor

The shader used by LineChart to increase the width of plotted lines has been refactored.

Fixed missing Serialport types

bug

The template had missing serialport types, which meant the transport-manager/config/serial.tsx would throw linter warnings around baudRate configuration.

v0.7.25

Forced webpack resolution to v4

bug

The new resolver was grabbing webpack 5 instead of the required v4.

v0.7.24

v0.7.23

feat

The Dropdown component is now available.

RadioButton and NumberInput refactor

refactor

RadioButtons and NumberInputs have been refactored to use our hooks API internally.

TextInput maxLength prop

feat

TextInput components now take a maxLength prop to limit the length of text enterable into the field.

Stable yarn.lock files between operating systems

refactor

yarn.lock files will now be stable between operating systems. Prebuilt native dependencies will be fetched in a post-install step and their cache keys are now stored separately to the yarn.lock.

getDeviceAcceptableTransportKeys hook

feat

The getDeviceAcceptableTransportKeys hook can now be used to grab the acceptable transport keys for a device.

ColorPicker depth test

bug

ColorPickers can no longer be manipulated 'though' a modal over the top of them. Previously they didn't do a depth test and unintended behaviour resulted.

CSVLoggers no longer use Electron remote

refactor

CSVLogger components and hooks no longer use Electron's remote module for file dialog opening. They now have a dedicated IPC channel.

Codecs can optionally error if no codec matches

refactor

The CodecPipeline can now optionally error if no codecs match.

v0.7.22

Batch message datasource updates

refactor

Multiple charts rendered by the same datasource will have their updates batched in the same React pass.

React 17

chore

React 17 is now supported.

v0.7.21

Package bumps

chore

Some minor package bumps.

v0.7.20

Poll error when no devices attached

bug

Fixes a bug with polling when no devices are attached

v0.7.19

THREE Dispose console warn bug

bug

THREE will no longer complain that Scene has no dispose method.

v0.7.18

Yarn v2.2.2

chore

Yarn has been updated to v2.2.2

v0.7.17

Electron v10.1.3

feat

Electron v10.1.3 is now supported.

New Codecs API

refactorBREAKING

The codecs API has been refactored.

The old API received the entire message and a callback to push any amount of messages up the pipeline.

  1. export type LEDSettings = {
  2. glowTime: number
  3. enable: number
  4. }
  5. export class LEDCodec extends Codec {
  6. filter(message: Message): boolean
  7. encode(
  8. message: Message<LEDSettings>,
  9. push: PushCallback<Message<Buffer>>) {
  10. }: void
  11. decode(
  12. message: Message<Buffer>,
  13. push: PushCallback<Message<LEDSettings | null>>,
  14. ): void
  15. }

The new API reduces the functionality to only transform a payload to and from a Buffer.

The Pipelines API still has the capability to have the forking behaviour that was available here if need be, but this vastly simplifies the usual use case.

  1. export type LEDSettings = {
  2. glowTime: number
  3. enable: number
  4. }
  5. export class LEDCodec extends Codec {
  6. filter(message: Message): boolean
  7. encode(payload: LEDSettings): Buffer
  8. encode(payload: Buffer): LEDSettings
  9. }

Line Chart Thickness

feat

Line charts now support lines thicker than 1px.

Device Manager Proxy refactor

refactorBREAKING

The device manager proxy has had some of it's methods refactored to match the signature of the real device manager.

Cancellation Tokens

featBREAKING

Instead of timeouts, CancellationTokens are now used across the entire ElectricUI API surface.

They allow for hard deadlines for tasks, as well as user based cancellation at any point in the lifecycle.

  1. const cancellationToken = new CancellationToken()
  2. cancellationToken.deadline(10_000)
  3. setTimeout(() => cancellationToken.cancel(), 5_000)

v0.7.16

Fixed transport console not showing

bug

The transport console will now open correctly.

Electron v9.1.0

feat

Electron v9.1.0 is now supported.

v0.7.15

Monospace fonts for Statistics

feat

Monospace fonts are now the default for statistic values.

Electron v9.0.0

feat

Electron v9.0.0 is now supported.

v0.7.14

Filter tty serial paths by default

refactor

Serial comPaths in Linux that start with /dev/ttyS will be filtered by default in the latest template.

Prompt to use workspace TypeScript version in template

feat

The latest version of VSCode allows for a prompt to switch to the workspace version of TypeScript. This has been added to the template.

v0.7.13

Wait For Reply calls now include a description

refactor

Wait For Reply calls can now optionally include a description that's calculated on request instead of the textual form of the closure used to validate incoming messages. This aids in debugging when the calls fail.

All internal usages of the Wait For Reply calls have been annotated with a debug message to help with tracking down message failures.

v0.7.12

Electron Builder removal

refactorBREAKING

The Electron Builder dependency has been removed due to an upstream problem preventing installations on certain Windows platforms.

v0.7.11

New useProduceHint hook

feat

The new useProduceHint hook can be used to send Hints from the user interface to the transport manager. For example it can be used to supply a websockets URI for the WS transport without any external hint producer.

Removed timezone support from timeseries

refactorBREAKING

The timeseries dependency Pond.js relies on moment-timezone. In our gradual effort to refactor the timeseries system timezone support has been removed.

This is a breaking change but should not affect anyone during regular usage of the timeseries API.

Race connections on inital connect

refactor

If a device has multiple connections available upon first connection, they will be raced instead of waiting for all to complete connection before starting the handshake procedure.

Device primary connection hooks

feat

Two new hooks have been added. The useDevicePrimaryConnectionHash and the useDevicePrimaryConnectionTransportKey hook.

They can be used to find the connection hash and the transport key of the primary connection method of a device, respectively.

They use the CONNECTION_METADATA_RANK_KEY="connectionRank" metadata key of the connection in order to determine the primary connection, with rank #0 being the primary connection.

v0.7.10

Pin errors against components

refactor

The Blueprint Electric UI components will now pin their write errors against the components in the React tree, allowing for greater ease of debugging.

Slider twitch bug

bug

Sliders will now hold optimistic state until the packet has either been explicitly confirmed, or in the case of no-ack packets, written, or a rejection or timeout.

This prevents sliders from displaying the 'old' hardware state for a frame after releasing them.

v0.7.9

Heartbeat Startup

bug

The heartbeat startup sequence now immediately returns on a successful heartbeat, instead of waiting 2 seconds for heartbeat #2 to return (in the case of the default startup sequence).

v0.7.8

Undefined MessageID Guard

feat

An Undefined MessageID Guard has been added to the template's default set of pipelines.

MessageIDs that have not been seen before, without type information from the hardware will explicitly error when sent to hardware.

This should guard against spelling mistakes in messageIDs.