Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 92 additions & 27 deletions electron/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 2 additions & 3 deletions electron/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@
"@tanstack/react-router": "^1.130.17",
"@tanstack/react-table": "^8.21.2",
"@tanstack/router-devtools": "^1.105.0",
"@tanstack/zod-adapter": "^1.116.0",
"@vitejs/plugin-react": "^4.5.2",
"babel-plugin-react-compiler": "^19.0.0-beta-714736e-20250131",
"class-variance-authority": "^0.7.1",
Expand All @@ -101,8 +100,8 @@
"tailwindcss-animate": "^1.0.7",
"uplot": "^1.6.32",
"xlsx": "^0.18.5",
"zod": "^3.24.2",
"zod-validation-error": "^3.4.0",
"zod": "^4.3.5",
"zod-validation-error": "^5.0.0",
"zustand": "^5.0.8"
}
}
7 changes: 3 additions & 4 deletions electron/src/components/preset/NewPresetDialog.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { PresetData, PresetSchema } from "@/lib/preset/preset";
import {
Dialog,
DialogContent,
Expand All @@ -14,13 +13,13 @@ import { Separator } from "../ui/separator";
import { PresetPreviewEntries, PresetPreviewTable } from "./PresetPreviewTable";
import { Input } from "../ui/input";

export type NewPresetDialogProps<T extends PresetSchema> = {
currentState?: PresetData<T>;
export type NewPresetDialogProps<T> = {
currentState?: T;
previewEntries: PresetPreviewEntries<T>;
onSave: (name: string) => void;
};

export function NewPresetDialog<T extends PresetSchema>({
export function NewPresetDialog<T>({
currentState,
onSave,
previewEntries,
Expand Down
4 changes: 2 additions & 2 deletions electron/src/components/preset/PresetCard.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { useState } from "react";
import { Preset, PresetSchema } from "@/lib/preset/preset";

Check warning on line 2 in electron/src/components/preset/PresetCard.tsx

View workflow job for this annotation

GitHub Actions / lint

'PresetSchema' is defined but never used
import { TouchButton } from "@/components/touch/TouchButton";
import { PresetShowDialog } from "./PresetShowDialog";
import { Icon } from "../Icon";
Expand Down Expand Up @@ -60,7 +60,7 @@
);
}

export type PresetCardProps<T extends PresetSchema> = {
export type PresetCardProps<T> = {
preset: Preset<T>;
onApply: (preset: Preset<T>) => void;
onOverwrite: (preset: Preset<T>) => void;
Expand All @@ -72,7 +72,7 @@
isActive?: boolean;
};

export function PresetCard<T extends PresetSchema>({
export function PresetCard<T>({
preset,
onApply,
onOverwrite,
Expand Down
15 changes: 7 additions & 8 deletions electron/src/components/preset/PresetPreviewTable.tsx
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
import React, { Fragment } from "react";
import { PresetData, PresetSchema } from "@/lib/preset/preset";
import { renderUnitSymbol, renderUnitSyntax, Unit } from "@/control/units";

export const previewSeparator = undefined;

type PreviewSeparator = typeof previewSeparator;

type PresetPreviewEntry<T extends PresetSchema> = {
type PresetPreviewEntry<T> = {
name: string;
unit?: Unit;
renderValue: (data: PresetData<T>) => string | undefined;
renderValue: (data: T) => string | undefined;
};

export type PresetPreviewEntries<T extends PresetSchema> = (
export type PresetPreviewEntries<T> = (
| PresetPreviewEntry<T>
| PreviewSeparator
)[];

export type PresetPreviewTableProps<T extends PresetSchema> = {
data: PresetData<T>;
export type PresetPreviewTableProps<T> = {
data?: T;
entries: PresetPreviewEntries<T>;
};

export function PresetPreviewTable<T extends PresetSchema>({
export function PresetPreviewTable<T>({
data,
entries,
}: PresetPreviewTableProps<T>) {
Expand All @@ -39,7 +38,7 @@ export function PresetPreviewTable<T extends PresetSchema>({
);
}

const value = entry.renderValue(data);
const value = data !== undefined ? entry.renderValue(data) : undefined;
return (
<Fragment key={entry.name}>
<div>{entry.name}</div>
Expand Down
6 changes: 3 additions & 3 deletions electron/src/components/preset/PresetShowDialog.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Preset, PresetSchema } from "@/lib/preset/preset";
import { Preset } from "@/lib/preset/preset";
import {
Dialog,
DialogContent,
Expand All @@ -13,14 +13,14 @@ import { Icon } from "../Icon";
import { Separator } from "../ui/separator";
import { PresetPreviewEntries, PresetPreviewTable } from "./PresetPreviewTable";

export type PresetShowDialogProps<T extends PresetSchema> = {
export type PresetShowDialogProps<T> = {
preset: Preset<T>;
previewEntries: PresetPreviewEntries<T>;
onApply: (preset: Preset<T>) => void;
hideDate?: boolean;
};

export function PresetShowDialog<T extends PresetSchema>({
export function PresetShowDialog<T>({
preset,
onApply,
previewEntries,
Expand Down
6 changes: 3 additions & 3 deletions electron/src/components/preset/PresetsPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@ import React from "react";
import { ControlGrid } from "@/control/ControlGrid";
import { Page } from "@/components/Page";
import { usePresets, UsePresetsParams } from "@/lib/preset/usePresets";
import { Preset, PresetSchema } from "@/lib/preset/preset";
import { Preset } from "@/lib/preset/preset";
import { PresetCard } from "./PresetCard";
import { PresetPreviewEntries } from "./PresetPreviewTable";
import { NewPresetDialog } from "./NewPresetDialog";
import { downloadJson } from "@/lib/download";
import { JsonFileInput } from "../FileInput";

type PresetsPageProps<T extends PresetSchema> = UsePresetsParams<T> & {
type PresetsPageProps<T> = UsePresetsParams<T> & {
applyPreset: (preset: Preset<T>) => void;
previewEntries: PresetPreviewEntries<T>;
};

export function PresetsPage<T extends PresetSchema>({
export function PresetsPage<T>({
applyPreset,
machine_identification,
currentState,
Expand Down
15 changes: 2 additions & 13 deletions electron/src/control/EditValue.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ type Props = {
maxSlider?: number; // Override the slider max value
maxLabel?: string;
step?: number;
valueSchema?: z.ZodType<number>;
inverted?: boolean;
confirmation?: string;
renderValue: (value: number) => string;
Expand Down Expand Up @@ -89,7 +88,6 @@ export function EditValue({
description,
defaultValue,
step = 1,
valueSchema: schema,
inverted,
min,
max,
Expand All @@ -104,7 +102,7 @@ export function EditValue({

// Form setup
const formSchema = z.object({
value: schema ?? z.number(),
value: z.number(),
});
type FormSchema = z.infer<typeof formSchema>;

Expand Down Expand Up @@ -191,7 +189,6 @@ export function EditValue({
const numericValue = parseFloat(normalizedInput);
const hasValidationError =
isNaN(numericValue) ||
(schema && !schema.safeParse(numericValue).success) ||
(max !== undefined && numericValue > max) ||
(min !== undefined && numericValue < min);

Expand Down Expand Up @@ -222,15 +219,7 @@ export function EditValue({
setValueStringError(false);
preventFormSyncRef.current = false;
}
}, [
valueString,
valueStringDirty,
schema,
max,
min,
form,
roundToStepDecimals,
]);
}, [valueString, valueStringDirty, max, min, form, roundToStepDecimals]);

// Reset input state to clean form value
const resetInput = React.useCallback(() => {
Expand Down
5 changes: 4 additions & 1 deletion electron/src/lib/objects.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
export function deepEquals<T>(a: T, b: T): boolean {
export function deepEquals(
a: object | undefined,
b: object | undefined,
): boolean {
if (a === b) {
return true;
}
Expand Down
Loading
Loading