[Update] Config Page: Device Tab. Add mic/speaker auto select section.
This commit is contained in:
@@ -143,6 +143,7 @@
|
|||||||
},
|
},
|
||||||
"mic_host_device": {
|
"mic_host_device": {
|
||||||
"label": "Mic Device",
|
"label": "Mic Device",
|
||||||
|
"label_auto_select": "Auto Select",
|
||||||
"label_host": "Host/Driver",
|
"label_host": "Host/Driver",
|
||||||
"label_device": "Device"
|
"label_device": "Device"
|
||||||
},
|
},
|
||||||
@@ -175,7 +176,9 @@
|
|||||||
"count_desc": "Current registered word count: {{count}}"
|
"count_desc": "Current registered word count: {{count}}"
|
||||||
},
|
},
|
||||||
"speaker_device": {
|
"speaker_device": {
|
||||||
"label": "Speaker Device"
|
"label": "Speaker Device",
|
||||||
|
"label_auto_select": "Auto Select",
|
||||||
|
"label_device": "Device"
|
||||||
},
|
},
|
||||||
"speaker_dynamic_energy_threshold": {
|
"speaker_dynamic_energy_threshold": {
|
||||||
"label_for_automatic": "Speaker Energy Threshold (Current Setting: Automatic)",
|
"label_for_automatic": "Speaker Energy Threshold (Current Setting: Automatic)",
|
||||||
|
|||||||
@@ -24,15 +24,17 @@ export const DropdownMenu = (props) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const dropdown_content_wrapper_class_name = clsx(styles["dropdown_content_wrapper"], {
|
const dropdown_content_wrapper_class_name = clsx(styles["dropdown_content_wrapper"], {
|
||||||
[styles["is_opened"]]: (currentIsOpenedDropdownMenu === props.dropdown_id) ? true : false
|
[styles.is_opened]: (currentIsOpenedDropdownMenu === props.dropdown_id) ? true : false,
|
||||||
|
[styles.is_disabled]: props.is_disabled,
|
||||||
});
|
});
|
||||||
|
|
||||||
const dropdown_toggle_button_class_name = clsx(styles["dropdown_toggle_button"], {
|
const dropdown_toggle_button_class_name = clsx(styles["dropdown_toggle_button"], {
|
||||||
[styles["is_loading"]]: (props.state === "loading") ? true : false
|
[styles.is_loading]: (props.state === "loading") ? true : false,
|
||||||
|
[styles.is_disabled]: props.is_disabled,
|
||||||
});
|
});
|
||||||
|
|
||||||
const arrow_class_names = clsx(styles["arrow_left_svg"], {
|
const arrow_class_names = clsx(styles["arrow_left_svg"], {
|
||||||
[styles["is_opened"]]: (currentIsOpenedDropdownMenu === props.dropdown_id) ? true : false
|
[styles.is_opened]: (currentIsOpenedDropdownMenu === props.dropdown_id) ? true : false
|
||||||
});
|
});
|
||||||
|
|
||||||
const getSelectedText = () => {
|
const getSelectedText = () => {
|
||||||
|
|||||||
@@ -20,6 +20,12 @@
|
|||||||
&.is_loading {
|
&.is_loading {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
&.is_disabled {
|
||||||
|
pointer-events: none;
|
||||||
|
.dropdown_selected_text, .arrow_left_svg {
|
||||||
|
color: var(--dark_550_color);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown_selected_text {
|
.dropdown_selected_text {
|
||||||
@@ -37,6 +43,12 @@
|
|||||||
&.is_opened {
|
&.is_opened {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
&.is_disabled {
|
||||||
|
pointer-events: none;
|
||||||
|
.value_text {
|
||||||
|
color: var(--dark_550_color);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown_content {
|
.dropdown_content {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import clsx from "clsx";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import styles from "./Device.module.scss";
|
import styles from "./Device.module.scss";
|
||||||
import {
|
import {
|
||||||
@@ -12,6 +13,8 @@ export const Device = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
import { useEnableAutoMicSelect } from "@logics_configs/useEnableAutoMicSelect";
|
||||||
|
|
||||||
import { useMicHostList } from "@logics_configs/useMicHostList";
|
import { useMicHostList } from "@logics_configs/useMicHostList";
|
||||||
import { useSelectedMicHost } from "@logics_configs/useSelectedMicHost";
|
import { useSelectedMicHost } from "@logics_configs/useSelectedMicHost";
|
||||||
|
|
||||||
@@ -26,6 +29,7 @@ import { Switchbox } from "../components/switchbox/Switchbox";
|
|||||||
|
|
||||||
const Mic_Container = () => {
|
const Mic_Container = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
const { currentEnableAutoMicSelect, toggleEnableAutoMicSelect } = useEnableAutoMicSelect();
|
||||||
const { currentSelectedMicHost, setSelectedMicHost } = useSelectedMicHost();
|
const { currentSelectedMicHost, setSelectedMicHost } = useSelectedMicHost();
|
||||||
const { currentMicHostList, getMicHostList } = useMicHostList();
|
const { currentMicHostList, getMicHostList } = useMicHostList();
|
||||||
const { onMouseLeaveFunction } = useOnMouseLeaveDropdownMenu();
|
const { onMouseLeaveFunction } = useOnMouseLeaveDropdownMenu();
|
||||||
@@ -35,6 +39,8 @@ const Mic_Container = () => {
|
|||||||
setSelectedMicHost(selected_data.selected_id);
|
setSelectedMicHost(selected_data.selected_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const is_disabled_selector = currentEnableAutoMicSelect.data === true || currentEnableAutoMicSelect.data === "loading";
|
||||||
|
|
||||||
const { currentSelectedMicDevice, setSelectedMicDevice } = useSelectedMicDevice();
|
const { currentSelectedMicDevice, setSelectedMicDevice } = useSelectedMicDevice();
|
||||||
const { currentMicDeviceList, getMicDeviceList } = useMicDeviceList();
|
const { currentMicDeviceList, getMicDeviceList } = useMicDeviceList();
|
||||||
|
|
||||||
@@ -54,7 +60,6 @@ const Mic_Container = () => {
|
|||||||
desc: t("config_page.mic_dynamic_energy_threshold.desc_for_manual"),
|
desc: t("config_page.mic_dynamic_energy_threshold.desc_for_manual"),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -62,8 +67,17 @@ const Mic_Container = () => {
|
|||||||
<div className={styles.device_container} onMouseLeave={onMouseLeaveFunction}>
|
<div className={styles.device_container} onMouseLeave={onMouseLeaveFunction}>
|
||||||
<LabelComponent label={t("config_page.mic_host_device.label")} />
|
<LabelComponent label={t("config_page.mic_host_device.label")} />
|
||||||
<div className={styles.device_contents}>
|
<div className={styles.device_contents}>
|
||||||
|
|
||||||
|
<div className={styles.device_auto_select_wrapper}>
|
||||||
|
<p className={styles.device_secondary_label}>{t("config_page.mic_host_device.label_auto_select")}</p>
|
||||||
|
<Switchbox
|
||||||
|
variable={currentEnableAutoMicSelect}
|
||||||
|
toggleFunction={toggleEnableAutoMicSelect}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className={styles.device_dropdown_wrapper}>
|
<div className={styles.device_dropdown_wrapper}>
|
||||||
<p className={styles.device_dropdown_label}>{t("config_page.mic_host_device.label_host")}</p>
|
<p className={styles.device_secondary_label}>{t("config_page.mic_host_device.label_host")}</p>
|
||||||
<DropdownMenu
|
<DropdownMenu
|
||||||
dropdown_id="mic_host"
|
dropdown_id="mic_host"
|
||||||
selected_id={currentSelectedMicHost.data}
|
selected_id={currentSelectedMicHost.data}
|
||||||
@@ -72,11 +86,12 @@ const Mic_Container = () => {
|
|||||||
openListFunction={getMicHostList}
|
openListFunction={getMicHostList}
|
||||||
state={currentSelectedMicHost.state}
|
state={currentSelectedMicHost.state}
|
||||||
style={{ maxWidth: "20rem", minWidth: "10rem" }}
|
style={{ maxWidth: "20rem", minWidth: "10rem" }}
|
||||||
|
is_disabled={is_disabled_selector}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className={styles.device_dropdown_wrapper}>
|
<div className={styles.device_dropdown_wrapper}>
|
||||||
<p className={styles.device_dropdown_label}>{t("config_page.mic_host_device.label_device")}</p>
|
<p className={styles.device_secondary_label}>{t("config_page.mic_host_device.label_device")}</p>
|
||||||
<DropdownMenu
|
<DropdownMenu
|
||||||
dropdown_id="mic_device"
|
dropdown_id="mic_device"
|
||||||
selected_id={currentSelectedMicDevice.data}
|
selected_id={currentSelectedMicDevice.data}
|
||||||
@@ -84,6 +99,7 @@ const Mic_Container = () => {
|
|||||||
selectFunction={selectFunction_device}
|
selectFunction={selectFunction_device}
|
||||||
openListFunction={getMicDeviceList}
|
openListFunction={getMicDeviceList}
|
||||||
state={currentSelectedMicDevice.state}
|
state={currentSelectedMicDevice.state}
|
||||||
|
is_disabled={is_disabled_selector}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -107,6 +123,7 @@ const Mic_Container = () => {
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
import { useEnableAutoSpeakerSelect } from "@logics_configs/useEnableAutoSpeakerSelect";
|
||||||
|
|
||||||
import { useSpeakerDeviceList } from "@logics_configs/useSpeakerDeviceList";
|
import { useSpeakerDeviceList } from "@logics_configs/useSpeakerDeviceList";
|
||||||
import { useSelectedSpeakerDevice } from "@logics_configs/useSelectedSpeakerDevice";
|
import { useSelectedSpeakerDevice } from "@logics_configs/useSelectedSpeakerDevice";
|
||||||
@@ -114,6 +131,7 @@ import { useSpeakerThreshold } from "@logics_configs/useSpeakerThreshold";
|
|||||||
|
|
||||||
const Speaker_Container = () => {
|
const Speaker_Container = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
const { currentEnableAutoSpeakerSelect, toggleEnableAutoSpeakerSelect } = useEnableAutoSpeakerSelect();
|
||||||
const { currentSelectedSpeakerDevice, setSelectedSpeakerDevice } = useSelectedSpeakerDevice();
|
const { currentSelectedSpeakerDevice, setSelectedSpeakerDevice } = useSelectedSpeakerDevice();
|
||||||
const { currentSpeakerDeviceList, getSpeakerDeviceList } = useSpeakerDeviceList();
|
const { currentSpeakerDeviceList, getSpeakerDeviceList } = useSpeakerDeviceList();
|
||||||
const { onMouseLeaveFunction } = useOnMouseLeaveDropdownMenu();
|
const { onMouseLeaveFunction } = useOnMouseLeaveDropdownMenu();
|
||||||
@@ -123,6 +141,8 @@ const Speaker_Container = () => {
|
|||||||
setSelectedSpeakerDevice(selected_data.selected_id);
|
setSelectedSpeakerDevice(selected_data.selected_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const is_disabled_selector = currentEnableAutoSpeakerSelect.data === true || currentEnableAutoSpeakerSelect.data === "loading";
|
||||||
|
|
||||||
const getLabels = () => {
|
const getLabels = () => {
|
||||||
if (currentEnableAutomaticSpeakerThreshold.data === true) {
|
if (currentEnableAutomaticSpeakerThreshold.data === true) {
|
||||||
return {
|
return {
|
||||||
@@ -143,7 +163,17 @@ const Speaker_Container = () => {
|
|||||||
<div className={styles.device_container} onMouseLeave={onMouseLeaveFunction}>
|
<div className={styles.device_container} onMouseLeave={onMouseLeaveFunction}>
|
||||||
<LabelComponent label={t("config_page.speaker_device.label")} />
|
<LabelComponent label={t("config_page.speaker_device.label")} />
|
||||||
<div className={styles.device_contents}>
|
<div className={styles.device_contents}>
|
||||||
|
|
||||||
|
<div className={styles.device_auto_select_wrapper}>
|
||||||
|
<p className={styles.device_secondary_label}>{t("config_page.speaker_device.label_auto_select")}</p>
|
||||||
|
<Switchbox
|
||||||
|
variable={currentEnableAutoSpeakerSelect}
|
||||||
|
toggleFunction={toggleEnableAutoSpeakerSelect}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className={styles.device_dropdown_wrapper}>
|
<div className={styles.device_dropdown_wrapper}>
|
||||||
|
<p className={styles.device_secondary_label}>{t("config_page.mic_host_device.label_device")}</p>
|
||||||
<DropdownMenu
|
<DropdownMenu
|
||||||
dropdown_id="speaker_device"
|
dropdown_id="speaker_device"
|
||||||
label={t("config_page.speaker_device.label")}
|
label={t("config_page.speaker_device.label")}
|
||||||
@@ -152,6 +182,7 @@ const Speaker_Container = () => {
|
|||||||
selectFunction={selectFunction}
|
selectFunction={selectFunction}
|
||||||
openListFunction={getSpeakerDeviceList}
|
openListFunction={getSpeakerDeviceList}
|
||||||
state={currentSelectedSpeakerDevice.state}
|
state={currentSelectedSpeakerDevice.state}
|
||||||
|
is_disabled={is_disabled_selector}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -57,13 +57,23 @@
|
|||||||
gap: 2.8rem;
|
gap: 2.8rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.device_auto_select_wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
.device_dropdown_wrapper {
|
.device_dropdown_wrapper {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 0.6rem;
|
gap: 0.6rem;
|
||||||
|
white-space: nowrap;
|
||||||
|
&.is_disabled {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.device_dropdown_label {
|
.device_secondary_label {
|
||||||
padding-left: 0.2rem;
|
padding-left: 0.2rem;
|
||||||
font-size: 1.4rem;
|
font-size: 1.4rem;
|
||||||
color: var(--dark_500_color);
|
color: var(--dark_500_color);
|
||||||
|
|||||||
28
src-ui/logics/configs/useEnableAutoMicSelect.js
Normal file
28
src-ui/logics/configs/useEnableAutoMicSelect.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import { useStore_EnableAutoMicSelect } from "@store";
|
||||||
|
import { useStdoutToPython } from "@logics/useStdoutToPython";
|
||||||
|
|
||||||
|
export const useEnableAutoMicSelect = () => {
|
||||||
|
const { asyncStdoutToPython } = useStdoutToPython();
|
||||||
|
const { currentEnableAutoMicSelect, updateEnableAutoMicSelect } = useStore_EnableAutoMicSelect();
|
||||||
|
|
||||||
|
const getEnableAutoMicSelect = () => {
|
||||||
|
updateEnableAutoMicSelect(() => new Promise(() => {}));
|
||||||
|
asyncStdoutToPython("/config/enable_mic_automatic_selection");
|
||||||
|
};
|
||||||
|
|
||||||
|
const toggleEnableAutoMicSelect = () => {
|
||||||
|
updateEnableAutoMicSelect(() => new Promise(() => {}));
|
||||||
|
if (currentEnableAutoMicSelect.data) {
|
||||||
|
asyncStdoutToPython("/controller/callback_disable_mic_automatic_selection");
|
||||||
|
} else {
|
||||||
|
asyncStdoutToPython("/controller/callback_enable_mic_automatic_selection");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
currentEnableAutoMicSelect,
|
||||||
|
getEnableAutoMicSelect,
|
||||||
|
updateEnableAutoMicSelect,
|
||||||
|
toggleEnableAutoMicSelect,
|
||||||
|
};
|
||||||
|
};
|
||||||
28
src-ui/logics/configs/useEnableAutoSpeakerSelect.js
Normal file
28
src-ui/logics/configs/useEnableAutoSpeakerSelect.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import { useStore_EnableAutoSpeakerSelect } from "@store";
|
||||||
|
import { useStdoutToPython } from "@logics/useStdoutToPython";
|
||||||
|
|
||||||
|
export const useEnableAutoSpeakerSelect = () => {
|
||||||
|
const { asyncStdoutToPython } = useStdoutToPython();
|
||||||
|
const { currentEnableAutoSpeakerSelect, updateEnableAutoSpeakerSelect } = useStore_EnableAutoSpeakerSelect();
|
||||||
|
|
||||||
|
const getEnableAutoSpeakerSelect = () => {
|
||||||
|
updateEnableAutoSpeakerSelect(() => new Promise(() => {}));
|
||||||
|
asyncStdoutToPython("/config/enable_speaker_automatic_selection");
|
||||||
|
};
|
||||||
|
|
||||||
|
const toggleEnableAutoSpeakerSelect = () => {
|
||||||
|
updateEnableAutoSpeakerSelect(() => new Promise(() => {}));
|
||||||
|
if (currentEnableAutoSpeakerSelect.data) {
|
||||||
|
asyncStdoutToPython("/controller/callback_disable_speaker_automatic_selection");
|
||||||
|
} else {
|
||||||
|
asyncStdoutToPython("/controller/callback_enable_speaker_automatic_selection");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
currentEnableAutoSpeakerSelect,
|
||||||
|
getEnableAutoSpeakerSelect,
|
||||||
|
updateEnableAutoSpeakerSelect,
|
||||||
|
toggleEnableAutoSpeakerSelect,
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -5,6 +5,8 @@ import { useSelectableLanguageList } from "./useSelectableLanguageList";
|
|||||||
import { useVolume } from "./useVolume";
|
import { useVolume } from "./useVolume";
|
||||||
|
|
||||||
import { useSoftwareVersion } from "@logics_configs/useSoftwareVersion";
|
import { useSoftwareVersion } from "@logics_configs/useSoftwareVersion";
|
||||||
|
import { useEnableAutoMicSelect } from "@logics_configs/useEnableAutoMicSelect";
|
||||||
|
import { useEnableAutoSpeakerSelect } from "@logics_configs/useEnableAutoSpeakerSelect";
|
||||||
import { useMicHostList } from "@logics_configs/useMicHostList";
|
import { useMicHostList } from "@logics_configs/useMicHostList";
|
||||||
import { useSelectedMicHost } from "@logics_configs/useSelectedMicHost";
|
import { useSelectedMicHost } from "@logics_configs/useSelectedMicHost";
|
||||||
import { useMicDeviceList } from "@logics_configs/useMicDeviceList";
|
import { useMicDeviceList } from "@logics_configs/useMicDeviceList";
|
||||||
@@ -35,6 +37,10 @@ export const useReceiveRoutes = () => {
|
|||||||
} = useMessage();
|
} = useMessage();
|
||||||
|
|
||||||
const { updateSoftwareVersion } = useSoftwareVersion();
|
const { updateSoftwareVersion } = useSoftwareVersion();
|
||||||
|
|
||||||
|
const { updateEnableAutoMicSelect } = useEnableAutoMicSelect();
|
||||||
|
const { updateEnableAutoSpeakerSelect } = useEnableAutoSpeakerSelect();
|
||||||
|
|
||||||
const { updateMicHostList } = useMicHostList();
|
const { updateMicHostList } = useMicHostList();
|
||||||
const { updateSelectedMicHost } = useSelectedMicHost();
|
const { updateSelectedMicHost } = useSelectedMicHost();
|
||||||
const { updateMicDeviceList } = useMicDeviceList();
|
const { updateMicDeviceList } = useMicDeviceList();
|
||||||
@@ -70,6 +76,11 @@ export const useReceiveRoutes = () => {
|
|||||||
|
|
||||||
"/config/version": updateSoftwareVersion,
|
"/config/version": updateSoftwareVersion,
|
||||||
|
|
||||||
|
"/controller/callback_enable_mic_automatic_selection": updateEnableAutoMicSelect,
|
||||||
|
"/controller/callback_disable_mic_automatic_selection": updateEnableAutoMicSelect,
|
||||||
|
"/controller/callback_enable_speaker_automatic_selection": updateEnableAutoSpeakerSelect,
|
||||||
|
"/controller/callback_disable_speaker_automatic_selection": updateEnableAutoSpeakerSelect,
|
||||||
|
|
||||||
"/controller/list_mic_host": (payload) => updateMicHostList(arrayToObject(payload)),
|
"/controller/list_mic_host": (payload) => updateMicHostList(arrayToObject(payload)),
|
||||||
"/config/choice_mic_host": updateSelectedMicHost,
|
"/config/choice_mic_host": updateSelectedMicHost,
|
||||||
"/controller/callback_set_mic_host": (payload) => {
|
"/controller/callback_set_mic_host": (payload) => {
|
||||||
|
|||||||
@@ -117,6 +117,9 @@ export const { atomInstance: Atom_IsOpenedDropdownMenu, useHook: useStore_IsOpen
|
|||||||
|
|
||||||
|
|
||||||
// Config Page
|
// Config Page
|
||||||
|
export const { atomInstance: Atom_EnableAutoMicSelect, useHook: useStore_EnableAutoMicSelect } = createAsyncAtomWithHook(true, "EnableAutoMicSelect");
|
||||||
|
export const { atomInstance: Atom_EnableAutoSpeakerSelect, useHook: useStore_EnableAutoSpeakerSelect } = createAsyncAtomWithHook(true, "EnableAutoSpeakerSelect");
|
||||||
|
|
||||||
export const { atomInstance: Atom_MicHostList, useHook: useStore_MicHostList } = createAsyncAtomWithHook({}, "MicHostList");
|
export const { atomInstance: Atom_MicHostList, useHook: useStore_MicHostList } = createAsyncAtomWithHook({}, "MicHostList");
|
||||||
export const { atomInstance: Atom_SelectedMicHost, useHook: useStore_SelectedMicHost } = createAsyncAtomWithHook("Nothing Selected", "SelectedMicHost");
|
export const { atomInstance: Atom_SelectedMicHost, useHook: useStore_SelectedMicHost } = createAsyncAtomWithHook("Nothing Selected", "SelectedMicHost");
|
||||||
export const { atomInstance: Atom_MicDeviceList, useHook: useStore_MicDeviceList } = createAsyncAtomWithHook({}, "MicDeviceList");
|
export const { atomInstance: Atom_MicDeviceList, useHook: useStore_MicDeviceList } = createAsyncAtomWithHook({}, "MicDeviceList");
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
--dark_400_color: #c7c8cc;
|
--dark_400_color: #c7c8cc;
|
||||||
--dark_450_color: #b8b9bd;
|
--dark_450_color: #b8b9bd;
|
||||||
--dark_500_color: #a9aaae;
|
--dark_500_color: #a9aaae;
|
||||||
|
--dark_550_color: #949599;
|
||||||
--dark_600_color: #7f8084;
|
--dark_600_color: #7f8084;
|
||||||
--dark_650_color: #75767a;
|
--dark_650_color: #75767a;
|
||||||
--dark_700_color: #6a6c6f;
|
--dark_700_color: #6a6c6f;
|
||||||
|
|||||||
Reference in New Issue
Block a user