diff --git a/frontend/realtime/src/KonvaRootComponent/KonvaRootComponent.tsx b/frontend/realtime/src/KonvaRootComponent/KonvaRootComponent.tsx
index d50e92db1c..67fe699ce1 100644
--- a/frontend/realtime/src/KonvaRootComponent/KonvaRootComponent.tsx
+++ b/frontend/realtime/src/KonvaRootComponent/KonvaRootComponent.tsx
@@ -23,6 +23,7 @@ import { useLayoutContext } from "./contextSignals/layout";
import { useRenderCounter } from "~/hooks/useRenderCounter";
import { useNavigate } from "react-router-dom";
import { SignaledMagicBox } from "./SignaledMagicBox";
+import { SignaledPromptSlider } from "./SignaledPromptSlider";
export const KonvaRootComponent = ({
className,
@@ -54,13 +55,14 @@ export const KonvaRootComponent = ({
+
{
+
+ const sliderValue = promptStrength.value
+ const onSliderValueChanged = dispatchUiEvents.promptSettings.setPromptStrength
+
+ // This makes component re-render whenever the signal value changes
+ useSignalEffect(() => {
+ promptStrength.value;
+ })
+
+ return (
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/frontend/realtime/src/signals/uiEvents/index.ts b/frontend/realtime/src/signals/uiEvents/index.ts
index a3b629e145..d2a9239583 100644
--- a/frontend/realtime/src/signals/uiEvents/index.ts
+++ b/frontend/realtime/src/signals/uiEvents/index.ts
@@ -24,6 +24,10 @@ import {
dispatchers as toolbarVideoExtractionDispatchers,
eventsHandlers as toolbarVideoExtractionEvents,
} from "./toolbarVideoExtraction";
+import {
+ dispatchers as promptDispatchers,
+ events as promptEvents,
+} from "./promptSettings";
export const uiEvents = {
...addMediaEvents,
@@ -34,6 +38,7 @@ export const uiEvents = {
toolbarMain: toolbarMainEvents,
toolbarNode: toolbarNodeEvents,
toolbarVideoExtraction: toolbarVideoExtractionEvents,
+ promptEvents: promptEvents,
};
export const dispatchUiEvents = {
...addMediaDispatchers,
@@ -44,4 +49,5 @@ export const dispatchUiEvents = {
toolbarMain: toolbarMainDispatchers,
toolbarNode: toolbarNodeDispatchers,
toolbarVideoExtraction: toolbarVideoExtractionDispatchers,
+ promptSettings: promptDispatchers,
};
diff --git a/frontend/realtime/src/signals/uiEvents/promptSettings.ts b/frontend/realtime/src/signals/uiEvents/promptSettings.ts
new file mode 100644
index 0000000000..104add5d3b
--- /dev/null
+++ b/frontend/realtime/src/signals/uiEvents/promptSettings.ts
@@ -0,0 +1,44 @@
+import { effect, signal } from "@preact/signals-react";
+
+// Prompt settings
+// - Prompt text
+// - Prompt strength
+export const DEFAULT_PROMPT_TEXT: string = "";
+export const promptText = signal(DEFAULT_PROMPT_TEXT);
+const setPrompt = (data: string) => {
+ promptText.value = data;
+};
+
+const onPromptTextChanged = (callback: (data: string) => void) => {
+ effect(() => {
+ if (promptText.value) {
+ callback(promptText.value);
+ }
+ });
+};
+
+export const DEFAULT_PROMPT_STRENGTH = 100;
+export const promptStrength = signal(DEFAULT_PROMPT_STRENGTH);
+const setPromptStrength = (data: number) => {
+ // Round to integer, then clamp between 0 and 100
+ promptStrength.value = Math.max(0, Math.min(100, Math.round(data)));
+};
+
+const onPromptStrengthChanged = (callback: (data: number) => void) => {
+ effect(() => {
+ if (promptStrength.value) {
+ callback(promptStrength.value);
+ }
+ });
+};
+
+//EXPORTS
+export const dispatchers = {
+ setPrompt,
+ setPromptStrength,
+};
+
+export const events = {
+ onPromptTextChanged,
+ onPromptStrengthChanged,
+};