);
};
-const Separator = ({ ...props }) => {
+const Separator = ({ onDragStart, ...props }) => {
return (
-
+
);
-};
\ No newline at end of file
+};
diff --git a/src-ui/app/main_page/main_section/message_container/MessageContainer.module.scss b/src-ui/app/main_page/main_section/message_container/MessageContainer.module.scss
index 2bd2288b..27763d9c 100644
--- a/src-ui/app/main_page/main_section/message_container/MessageContainer.module.scss
+++ b/src-ui/app/main_page/main_section/message_container/MessageContainer.module.scss
@@ -6,6 +6,11 @@
padding: 0 1.6rem 1rem 1.6rem;
}
+.log_box_resize_wrapper {
+ flex: 1;
+ overflow: auto;
+}
+
.separator {
position: relative;
width: 100%;
@@ -32,5 +37,5 @@
.message_box_resize_wrapper {
height: 10rem;
min-height: 3.8rem;
- max-height: 80%;
+ max-height: 90%;
}
\ No newline at end of file
diff --git a/src-ui/logics/main/useMessageInputBoxRatio.js b/src-ui/logics/main/useMessageInputBoxRatio.js
new file mode 100644
index 00000000..61a36706
--- /dev/null
+++ b/src-ui/logics/main/useMessageInputBoxRatio.js
@@ -0,0 +1,24 @@
+import { useStore_MessageInputBoxRatio } from "@store";
+import { useStdoutToPython } from "@logics/useStdoutToPython";
+import { clampMinMax } from "@utils/clampMinMax";
+export const useMessageInputBoxRatio = () => {
+ const { asyncStdoutToPython } = useStdoutToPython();
+ const { currentMessageInputBoxRatio, updateMessageInputBoxRatio } = useStore_MessageInputBoxRatio();
+
+ const getMessageInputBoxRatio = () => {
+ asyncStdoutToPython("/get/data/message_box_ratio");
+ };
+
+ const setMessageInputBoxRatio = (ratio) => {
+ const parsed = parseFloat(ratio.toFixed(2));
+ const valid_ratio = clampMinMax(parsed, 1, 99);
+ asyncStdoutToPython("/set/data/message_box_ratio", valid_ratio);
+ };
+
+ return {
+ currentMessageInputBoxRatio,
+ getMessageInputBoxRatio,
+ updateMessageInputBoxRatio,
+ setMessageInputBoxRatio,
+ };
+};
\ No newline at end of file
diff --git a/src-ui/logics/useReceiveRoutes.js b/src-ui/logics/useReceiveRoutes.js
index 45bb2cbd..406a7b31 100644
--- a/src-ui/logics/useReceiveRoutes.js
+++ b/src-ui/logics/useReceiveRoutes.js
@@ -1,12 +1,15 @@
import { translator_status } from "@data";
import { arrayToObject } from "@utils/arrayToObject";
-import { useMainFunction } from "@logics_main/useMainFunction";
+
import { useMessage } from "@logics_common/useMessage";
+import { useVolume } from "@logics_common/useVolume";
+
+import { useMainFunction } from "@logics_main/useMainFunction";
import { useSelectableLanguageList } from "@logics_main/useSelectableLanguageList";
import { useLanguageSettings } from "@logics_main/useLanguageSettings";
import { useIsMainPageCompactMode } from "@logics_main/useIsMainPageCompactMode";
-import { useVolume } from "@logics_common/useVolume";
+import { useMessageInputBoxRatio } from "@logics_main/useMessageInputBoxRatio";
import { useSoftwareVersion } from "@logics_configs/useSoftwareVersion";
@@ -67,6 +70,9 @@ export const useReceiveRoutes = () => {
updateSpeakerThresholdCheckStatus,
} = useVolume();
+ const { updateMessageInputBoxRatio } = useMessageInputBoxRatio();
+
+
const routes = {
// Main Page
// Page Controls
@@ -118,6 +124,10 @@ export const useReceiveRoutes = () => {
"/run/transcription_send_mic_message": addSentMessageLog,
"/run/transcription_receive_speaker_message": addReceivedMessageLog,
+ // Message Box
+ "/get/data/message_box_ratio": updateMessageInputBoxRatio,
+ "/set/data/message_box_ratio": updateMessageInputBoxRatio,
+
// Config Page
// Common
diff --git a/src-ui/logics/useStdoutToPython.js b/src-ui/logics/useStdoutToPython.js
index 3c852726..fa7c0e35 100644
--- a/src-ui/logics/useStdoutToPython.js
+++ b/src-ui/logics/useStdoutToPython.js
@@ -2,9 +2,9 @@ import { store } from "@store";
import { encode } from "js-base64";
export const useStdoutToPython = () => {
- const asyncStdoutToPython = async (path, value) => {
+ const asyncStdoutToPython = async (path, value = undefined) => {
let send_object = { endpoint: path };
- if (value) send_object.data = encode(JSON.stringify(value));
+ if (value !== undefined) send_object.data = encode(JSON.stringify(value));
// send to python
const backend_subprocess = store.backend_subprocess;
diff --git a/src-ui/store.js b/src-ui/store.js
index 56e1f9ea..363c21fb 100644
--- a/src-ui/store.js
+++ b/src-ui/store.js
@@ -101,18 +101,15 @@ const createAtomWithHook = (initialValue, base_name, options) => {
export const { atomInstance: Atom_SoftwareVersion, useHook: useStore_SoftwareVersion } = createAtomWithHook("-", "SoftwareVersion");
+// Main Page
+// Functions
export const { atomInstance: Atom_TranslationStatus, useHook: useStore_TranslationStatus } = createAtomWithHook(false, "TranslationStatus", {is_state_ok: true});
export const { atomInstance: Atom_TranscriptionSendStatus, useHook: useStore_TranscriptionSendStatus } = createAtomWithHook(false, "TranscriptionSendStatus", {is_state_ok: true});
export const { atomInstance: Atom_TranscriptionReceiveStatus, useHook: useStore_TranscriptionReceiveStatus } = createAtomWithHook(false, "TranscriptionReceiveStatus", {is_state_ok: true});
export const { atomInstance: Atom_ForegroundStatus, useHook: useStore_ForegroundStatus } = createAtomWithHook(false, "ForegroundStatus", {is_state_ok: true});
export const { atomInstance: Atom_MessageLogs, useHook: useStore_MessageLogs } = createAtomWithHook(generateTestData(20), "MessageLogs");
-export const { atomInstance: Atom_IsMainPageCompactMode, useHook: useStore_IsMainPageCompactMode } = createAtomWithHook(false, "IsMainPageCompactMode");
-export const { atomInstance: Atom_IsOpenedLanguageSelector, useHook: useStore_IsOpenedLanguageSelector } = createAtomWithHook(
- { your_language: false, target_language: false },
- "IsOpenedLanguageSelector"
-);
export const { atomInstance: Atom_SelectableLanguageList, useHook: useStore_SelectableLanguageList } = createAtomWithHook([], "SelectableLanguageList");
export const { atomInstance: Atom_SelectedPresetTabNumber, useHook: useStore_SelectedPresetTabNumber } = createAtomWithHook("", "SelectedPresetTabNumber");
@@ -127,10 +124,21 @@ export const { atomInstance: Atom_SelectedTranslationEngines, useHook: useStore_
export const { atomInstance: Atom_IsOpenedConfigPage, useHook: useStore_IsOpenedConfigPage } = createAtomWithHook(false, "IsOpenedConfigPage");
export const { atomInstance: Atom_SelectedConfigTabId, useHook: useStore_SelectedConfigTabId } = createAtomWithHook("device", "SelectedConfigTabId");
-export const { atomInstance: Atom_IsOpenedDropdownMenu, useHook: useStore_IsOpenedDropdownMenu } = createAtomWithHook("", "IsOpenedDropdownMenu");
+
+// Designs
+export const { atomInstance: Atom_IsMainPageCompactMode, useHook: useStore_IsMainPageCompactMode } = createAtomWithHook(false, "IsMainPageCompactMode");
+export const { atomInstance: Atom_MessageInputBoxRatio, useHook: useStore_MessageInputBoxRatio } = createAtomWithHook(20, "MessageInputBoxRatio");
+export const { atomInstance: Atom_IsOpenedLanguageSelector, useHook: useStore_IsOpenedLanguageSelector } = createAtomWithHook(
+ { your_language: false, target_language: false },
+ "IsOpenedLanguageSelector"
+);
// Config Page
+// Designs
+export const { atomInstance: Atom_IsOpenedDropdownMenu, useHook: useStore_IsOpenedDropdownMenu } = createAtomWithHook("", "IsOpenedDropdownMenu");
+
+// Device
export const { atomInstance: Atom_EnableAutoMicSelect, useHook: useStore_EnableAutoMicSelect } = createAtomWithHook(true, "EnableAutoMicSelect");
export const { atomInstance: Atom_EnableAutoSpeakerSelect, useHook: useStore_EnableAutoSpeakerSelect } = createAtomWithHook(true, "EnableAutoSpeakerSelect");
diff --git a/src-ui/utils/clampMinMax.js b/src-ui/utils/clampMinMax.js
new file mode 100644
index 00000000..1eced3f0
--- /dev/null
+++ b/src-ui/utils/clampMinMax.js
@@ -0,0 +1,8 @@
+export const clampMinMax = (value, min, max) => {
+ return Math.min(Math.max(value, min), max);
+};
+
+// console.log(clamp(5, 1, 10)); // 5 (範囲内)
+// console.log(clamp(-3, 0, 10)); // 0 (minより小さい)
+// console.log(clamp(15, 1, 10)); // 10 (maxより大きい)
+// console.log(clamp(7.5, 1, 10)); // 7.5 (範囲内、少数)
\ No newline at end of file