-
+
{formatLabel(value)}
+
+
+
+
-
-
-
+ {open &&
+ coords &&
+ createPortal(
+
+ {options.map((option, i) => (
+ - setHighlight(i)}
+ onClick={() => pick(option)}
+ >
+ {formatLabel(option)}
+
+ ))}
+
,
+ document.body
+ )}
);
}
-export default ChoiceSelect;
+export default ChoiceSelect;
\ No newline at end of file
diff --git a/src/features/dsp408/components/InputSection/ChannelSection.css b/src/features/dsp408/components/ChannelSection/ChannelSection.css
similarity index 100%
rename from src/features/dsp408/components/InputSection/ChannelSection.css
rename to src/features/dsp408/components/ChannelSection/ChannelSection.css
diff --git a/src/features/dsp408/components/InputSection/ChannelSection.tsx b/src/features/dsp408/components/ChannelSection/ChannelSection.tsx
similarity index 100%
rename from src/features/dsp408/components/InputSection/ChannelSection.tsx
rename to src/features/dsp408/components/ChannelSection/ChannelSection.tsx
diff --git a/src/features/dsp408/components/DSP408Panel/DSP408Panel.tsx b/src/features/dsp408/components/DSP408Panel/DSP408Panel.tsx
index e3c7bfe..98bcd8d 100644
--- a/src/features/dsp408/components/DSP408Panel/DSP408Panel.tsx
+++ b/src/features/dsp408/components/DSP408Panel/DSP408Panel.tsx
@@ -11,7 +11,7 @@ import LoadingOverlay from '../../../../components/LoadingOverlay/LoadingOverlay
import { InputChannel, OutputChannel } from '../../types';
import MatrixSection from '../Matrixsection/Matrixsection';
import GeqSection from '../GeqSection/GeqSection';
-import ChannelSection from '../InputSection/ChannelSection';
+import ChannelSection from '../ChannelSection/ChannelSection';
import { DSP408Api } from '../../dsp408';
import { DSP408 } from '../../../../types';
import { SidebarId } from '../../constants';
diff --git a/src/features/dsp408/components/MiscellaneousSection/MiscellaneousSection.tsx b/src/features/dsp408/components/MiscellaneousSection/MiscellaneousSection.tsx
index 64c28e3..b60b42a 100644
--- a/src/features/dsp408/components/MiscellaneousSection/MiscellaneousSection.tsx
+++ b/src/features/dsp408/components/MiscellaneousSection/MiscellaneousSection.tsx
@@ -112,6 +112,7 @@ function MiscellaneousPanel({
value={inputSource.type}
options={INPUT_TYPES}
onChange={handleInputTypeChange}
+ style={{color: 'var(--font-primary)'}}
/>
@@ -131,6 +132,7 @@ function MiscellaneousPanel({
return `${frequency.slice(1)} Hz`;
}}
onChange={handleFrequencyChange}
+ style={{color: 'var(--font-primary)'}}
/>
)}
diff --git a/src/features/dsp408/dsp408.ts b/src/features/dsp408/dsp408.ts
index 7dfe6c1..58bd80d 100644
--- a/src/features/dsp408/dsp408.ts
+++ b/src/features/dsp408/dsp408.ts
@@ -720,6 +720,8 @@ export function forDSP408(dsp: DSP408, setDsps: SetDsps, notify: NotifyFn) {
await updateDSPState();
+ notify(`Preset stored in ${dsp.state.presets.names[presetIndex]}`, 'success', dsp.name);
+
return true;
} catch (err) {
notify(`Store configuration failed: ${String(err)}`, 'error', dsp.name);
@@ -746,6 +748,8 @@ export function forDSP408(dsp: DSP408, setDsps: SetDsps, notify: NotifyFn) {
await updateDSPState();
+ notify('Factory reset completed', 'success', dsp.name);
+
return true;
} catch (err) {
notify(`Factory reset failed: ${String(err)}`, 'error', dsp.name);
@@ -769,6 +773,8 @@ export function forDSP408(dsp: DSP408, setDsps: SetDsps, notify: NotifyFn) {
await updateDSPState();
+ notify('Channels copied successfully', 'success', dsp.name)
+
return true;
} catch (err) {
notify(`Channel copy failed: ${String(err)}`, 'error', dsp.name);
@@ -791,6 +797,8 @@ export function forDSP408(dsp: DSP408, setDsps: SetDsps, notify: NotifyFn) {
await updateDSPState();
+ notify('Input source updated', 'success', dsp.name);
+
return true;
} catch (err) {
notify(`Input source update failed: ${String(err)}`, 'error', dsp.name);
@@ -814,6 +822,8 @@ export function forDSP408(dsp: DSP408, setDsps: SetDsps, notify: NotifyFn) {
await updateDSPState();
+ notify('Channels linked successfully', 'success', dsp.name);
+
return true;
} catch (err) {
notify(`Channel linking failed: ${String(err)}`, 'error', dsp.name);
@@ -837,6 +847,8 @@ export function forDSP408(dsp: DSP408, setDsps: SetDsps, notify: NotifyFn) {
await updateDSPState();
+ notify('Channel name updated', 'success', dsp.name);
+
return true;
} catch (err) {
notify(`Channel name update failed: ${String(err)}`, 'error', dsp.name);
@@ -859,6 +871,8 @@ export function forDSP408(dsp: DSP408, setDsps: SetDsps, notify: NotifyFn) {
await updateDSPState();
+ notify('Device unlocked', 'success', dsp.name);
+
return true;
} catch (err) {
notify(`Unlock failed: ${String(err)}`, 'error', dsp.name);
@@ -881,6 +895,8 @@ export function forDSP408(dsp: DSP408, setDsps: SetDsps, notify: NotifyFn) {
await updateDSPState();
+ notify('Device locked', 'success', dsp.name);
+
return true;
} catch (err) {
notify(`Lock failed: ${String(err)}`, 'error', dsp.name);
diff --git a/src/pages/AddDspPage/AddDspPage.css b/src/pages/AddDspPage/AddDspPage.css
index 0715d0f..929c2a8 100644
--- a/src/pages/AddDspPage/AddDspPage.css
+++ b/src/pages/AddDspPage/AddDspPage.css
@@ -155,6 +155,11 @@
height: var(--card-control-height);
}
+.add-dsp-form__selector {
+ color: var(--text-primary);
+ height: 100%;
+}
+
.add-dsp-form__field .choice-stepper__input {
border: none;
background: transparent;
diff --git a/src/pages/AddDspPage/AddDspPage.tsx b/src/pages/AddDspPage/AddDspPage.tsx
index fc9a943..c715dce 100644
--- a/src/pages/AddDspPage/AddDspPage.tsx
+++ b/src/pages/AddDspPage/AddDspPage.tsx
@@ -107,7 +107,7 @@ function AddDSPForm({