diff --git a/frontend/realtime/src/KonvaApp/Engine.ts b/frontend/realtime/src/KonvaApp/Engine.ts
index 0ba0082587..b24f88f0bf 100644
--- a/frontend/realtime/src/KonvaApp/Engine.ts
+++ b/frontend/realtime/src/KonvaApp/Engine.ts
@@ -1,6 +1,5 @@
import Konva from "konva";
-
import { uiAccess, uiEvents } from "~/signals";
import { ShapeNode } from "./Nodes";
@@ -99,7 +98,6 @@ export class Engine {
this.stage.add(this.nodeIsolationLayer);
this.stage.add(this.uiLayer);
-
// Konva Transformer
this.nodeTransformer = new NodeTransformer();
this.uiLayer.add(this.nodeTransformer.getKonvaNode());
@@ -120,7 +118,7 @@ export class Engine {
height: VideoResolutions.SQUARE_1024.height,
mediaLayerRef: this.mediaLayer,
bgLayerRef: this.bgLayer,
- offScreenCanvas: this.offScreenCanvas
+ offScreenCanvas: this.offScreenCanvas,
});
// Collection of all Nodes
@@ -180,13 +178,8 @@ export class Engine {
// hence, lastly, setup these events
this.setupEventSystem();
this.setAppMode(AppModes.SELECT);
-
-
-
}
-
-
private setAppMode(newAppMode: AppModes) {
this.appMode = newAppMode;
switch (this.appMode) {
@@ -368,7 +361,6 @@ export class Engine {
uiEvents.toolbarMain.SAVE.onClick(async (/*event*/) => {
await this.realTimeDrawEngine.saveOutput();
-
});
uiEvents.toolbarMain.SELECT.onClick(() => {
@@ -411,8 +403,6 @@ export class Engine {
this.addImage(image);
});
-
-
uiEvents.onAddTextToEngine((textdata) => {
this.addText(textdata);
});
@@ -477,7 +467,7 @@ export class Engine {
return;
}
this.changeNodeColor(nodeColor);
- })
+ });
}
disableAllButtons() {
@@ -513,7 +503,7 @@ export class Engine {
}
// Sandbox is quickly a way to test your idea.
- public async sandbox() { }
+ public async sandbox() {}
public onMessage(event: MessageEvent) {
console.log("Message From Shared Worker");
@@ -541,9 +531,9 @@ export class Engine {
x: 10,
y: 80,
text: "",
- fontSize: 24,
+ fontSize: 18,
fontFamily: "Source Sans 3",
- fill: "black",
+ fill: "white",
});
const anim = new Konva.Animation((frame) => {
if (frame && import.meta.env.DEV) {
@@ -561,18 +551,20 @@ export class Engine {
}
private changeNodeColor(nodeColor: NodeColor) {
- console.log('Changing node color:', nodeColor);
+ console.log("Changing node color:", nodeColor);
// Find the node that is selected with the id
- const idSelector = '#' + nodeColor.kNodeId;
+ const idSelector = "#" + nodeColor.kNodeId;
const selectedNode = this.mediaLayer.findOne(idSelector);
- console.log('Selected node:', selectedNode);
- console.log('ID selector:', idSelector);
- console.log('Media layer:', this.mediaLayer);
+ console.log("Selected node:", selectedNode);
+ console.log("ID selector:", idSelector);
+ console.log("Media layer:", this.mediaLayer);
// TODO: Change the color of the node
// Turns out shapes are image nodes... how do we change the image's fill??
if (selectedNode) {
// Get the shape node from the real time drawing engine's image nodes
- const shapeNode = this.realTimeDrawEngine.findImageNodeById(nodeColor.kNodeId);
+ const shapeNode = this.realTimeDrawEngine.findImageNodeById(
+ nodeColor.kNodeId,
+ );
if (shapeNode && shapeNode instanceof ShapeNode) {
// Create new shape node with updated color
const newShapeNode = new ShapeNode({
@@ -582,7 +574,7 @@ export class Engine {
size: shapeNode.size,
color: nodeColor.color,
mediaLayerRef: this.mediaLayer,
- selectionManagerRef: this.selectionManager
+ selectionManagerRef: this.selectionManager,
});
newShapeNode.kNode.position(shapeNode.kNode.position());
newShapeNode.kNode.zIndex(shapeNode.kNode.zIndex());
@@ -613,7 +605,7 @@ export class Engine {
size: size,
color: color,
mediaLayerRef: this.mediaLayer,
- selectionManagerRef: this.selectionManager
+ selectionManagerRef: this.selectionManager,
});
shapeNode.kNode.zIndex(1); // Replace desiredZIndex with a number
@@ -677,7 +669,7 @@ export class Engine {
if (
longestVideoNode === undefined ||
node.videoComponent.duration >
- longestVideoNode.videoComponent.duration
+ longestVideoNode.videoComponent.duration
) {
longestVideoNode = node;
}
diff --git a/frontend/realtime/src/KonvaApp/Nodes/ShapeNode.ts b/frontend/realtime/src/KonvaApp/Nodes/ShapeNode.ts
index 8fe24454e7..7e28a2120d 100644
--- a/frontend/realtime/src/KonvaApp/Nodes/ShapeNode.ts
+++ b/frontend/realtime/src/KonvaApp/Nodes/ShapeNode.ts
@@ -23,7 +23,6 @@ interface ShapeNodeConstructor {
}
export class ShapeNode extends NetworkedNode {
-
retry(): void {
throw new Error("Method not implemented.");
}
@@ -36,7 +35,7 @@ export class ShapeNode extends NetworkedNode {
canvasSize,
shapeType,
size,
- color = "#ff0000", // Default red if no color provided
+ color = "#2D81FF", // Default red if no color provided
transform: existingTransform,
mediaLayerRef,
selectionManagerRef,
@@ -49,7 +48,7 @@ export class ShapeNode extends NetworkedNode {
});
let shape = null;
-
+
switch (shapeType) {
case ShapeType.CIRCLE:
const circleShape = new Konva.Circle({
@@ -72,7 +71,7 @@ export class ShapeNode extends NetworkedNode {
width: circleShape.width(),
height: circleShape.height(),
...transform,
- fill: 'transparent',
+ fill: "transparent",
strokeScaleEnabled: false,
draggable: true,
});
@@ -107,7 +106,7 @@ export class ShapeNode extends NetworkedNode {
width: squareShape.width(),
height: squareShape.height(),
...transform,
- fill: 'transparent',
+ fill: "transparent",
strokeScaleEnabled: false,
draggable: true,
});
@@ -142,7 +141,7 @@ export class ShapeNode extends NetworkedNode {
width: triangleShape.width(),
height: triangleShape.height(),
...transform,
- fill: 'transparent',
+ fill: "transparent",
strokeScaleEnabled: false,
draggable: true,
});
diff --git a/frontend/realtime/src/KonvaApp/Nodes/constants.ts b/frontend/realtime/src/KonvaApp/Nodes/constants.ts
index e6f46020ae..c2a1fcc1c8 100644
--- a/frontend/realtime/src/KonvaApp/Nodes/constants.ts
+++ b/frontend/realtime/src/KonvaApp/Nodes/constants.ts
@@ -4,12 +4,12 @@ export enum NodeType {
IMAGE = "image",
TEXT = "text",
VIDEO = "video",
- SHAPE = "shape"
+ SHAPE = "shape",
}
export const transparent = Colors.transparent;
export const primaryOrange = Colors.primaryOrange;
-export const highlightStrokeWidth = 10;
+export const highlightStrokeWidth = 2;
export const minNodeSize = {
width: 200,
height: 200,
diff --git a/frontend/realtime/src/KonvaApp/NodesManagers/SelectorSquare.ts b/frontend/realtime/src/KonvaApp/NodesManagers/SelectorSquare.ts
index 0f8247fd9d..4ca69ecb58 100644
--- a/frontend/realtime/src/KonvaApp/NodesManagers/SelectorSquare.ts
+++ b/frontend/realtime/src/KonvaApp/NodesManagers/SelectorSquare.ts
@@ -40,8 +40,9 @@ export class SelectorSquare {
stageRef: Konva.Stage;
}) {
this.kSquare = new Konva.Rect({
- fill: " rgb(250, 128, 114, 0.3)",
- stroke: "salmon",
+ fill: "rgba(45, 129, 255, 0.3)",
+ stroke: "#00a1ff",
+ strokeWidth: 1,
visible: false,
// disable events to not interrupt with events
listening: false,
diff --git a/frontend/realtime/src/KonvaApp/constants.ts b/frontend/realtime/src/KonvaApp/constants.ts
index 79e10cbae9..964a1bb87c 100644
--- a/frontend/realtime/src/KonvaApp/constants.ts
+++ b/frontend/realtime/src/KonvaApp/constants.ts
@@ -16,5 +16,5 @@ export const VideoResolutions = {
export const Colors = {
transparent: "rgba(0,0,0,0)",
translucentBlack: "rgba(0,0,0,0.3)",
- primaryOrange: "rgba(230,100,98,1)",
+ primaryOrange: "rgba(45, 129, 255, 1)",
};
diff --git a/frontend/realtime/src/KonvaRootComponent/SignaledPromptSlider.tsx b/frontend/realtime/src/KonvaRootComponent/SignaledPromptSlider.tsx
index 308a87151c..a8391ce567 100644
--- a/frontend/realtime/src/KonvaRootComponent/SignaledPromptSlider.tsx
+++ b/frontend/realtime/src/KonvaRootComponent/SignaledPromptSlider.tsx
@@ -1,22 +1,28 @@
-
import { useSignalEffect } from "@preact/signals-react";
-import { Slider } from "~/components/ui"
-import { dispatchUiEvents } from "~/signals"
+import { Slider } from "~/components/ui";
+import { dispatchUiEvents } from "~/signals";
import { promptStrength } from "~/signals/uiEvents/promptSettings";
export const SignaledPromptSlider = () => {
+ const sliderValue = promptStrength.value;
+ const onSliderValueChanged =
+ dispatchUiEvents.promptSettings.setPromptStrength;
- const sliderValue = promptStrength.value
- const onSliderValueChanged = dispatchUiEvents.promptSettings.setPromptStrength
+ // This makes component re-render whenever the signal value changes
+ useSignalEffect(() => {
+ promptStrength.value;
+ });
- // This makes component re-render whenever the signal value changes
- useSignalEffect(() => {
- promptStrength.value;
- })
-
- return (
-
-
-
- )
-}
\ No newline at end of file
+ return (
+
+
+
+ );
+};
diff --git a/frontend/realtime/src/KonvaRootComponent/SignaledPromptText.tsx b/frontend/realtime/src/KonvaRootComponent/SignaledPromptText.tsx
index 8ab5130141..a5203ab6aa 100644
--- a/frontend/realtime/src/KonvaRootComponent/SignaledPromptText.tsx
+++ b/frontend/realtime/src/KonvaRootComponent/SignaledPromptText.tsx
@@ -1,31 +1,17 @@
import { useSignalEffect } from "@preact/signals-react";
-import { useCallback, useEffect, useRef } from "react";
+import { useRef } from "react";
import { ResizeType, Textarea } from "~/components/ui";
import { dispatchUiEvents } from "~/signals";
import { promptText } from "~/signals/uiEvents/promptSettings";
-export const SignaledPromptText = ({
-}) => {
+export const SignaledPromptText = ({}) => {
const textAreaRef = useRef(null);
- const focusOnTextArea = useCallback(() => {
- if (textAreaRef.current === null) {
- return;
- }
- textAreaRef.current.focus();
- }, []);
-
- useEffect(() => {
- focusOnTextArea();
- }, []);
const TextAreaStates = {
- style: {
- width: "530px",
- height: "200px",
- },
- placeholder: "",
+ placeholder: "Type your prompt here...",
label: "",
resize: "none" as ResizeType,
+ rows: 3,
};
const textContent = promptText.value;
@@ -36,11 +22,18 @@ export const SignaledPromptText = ({
// This makes component re-render whenever the signal value changes
useSignalEffect(() => {
promptText.value;
- })
+ });
return (
-
-
+
+
);
};
diff --git a/frontend/realtime/src/KonvaRootComponent/SignaledToolbarMain.tsx b/frontend/realtime/src/KonvaRootComponent/SignaledToolbarMain.tsx
index f3baac309e..29822b0886 100644
--- a/frontend/realtime/src/KonvaRootComponent/SignaledToolbarMain.tsx
+++ b/frontend/realtime/src/KonvaRootComponent/SignaledToolbarMain.tsx
@@ -53,7 +53,10 @@ export const SignaledToolbarMain = ({
case ToolbarMainButtonNames.SELECT:
case ToolbarMainButtonNames.ERASER:
case ToolbarMainButtonNames.PAINT:
- return (e: React.MouseEvent
) => { toolbarMain.setMode(buttonName); dispatchers[buttonName](e); };
+ return (e: React.MouseEvent) => {
+ toolbarMain.setMode(buttonName);
+ dispatchers[buttonName](e);
+ };
default:
return dispatchers[buttonName];
}
@@ -80,7 +83,7 @@ export const SignaledToolbarMain = ({
dispatchers.loadingBarRetry(e);
};
return (
-
+
{
// This is a hook that will log the number of times the component has rerendered
@@ -25,6 +26,7 @@ export const Main = withProtectionRoute(() => {
/>
+
{/* */}
diff --git a/frontend/realtime/src/components/features/DialogAddImage/DialogAddImage.tsx b/frontend/realtime/src/components/features/DialogAddImage/DialogAddImage.tsx
index 2222c92286..f1f1d5f55f 100644
--- a/frontend/realtime/src/components/features/DialogAddImage/DialogAddImage.tsx
+++ b/frontend/realtime/src/components/features/DialogAddImage/DialogAddImage.tsx
@@ -52,7 +52,7 @@ export const DialogAddImage = ({
"w-full max-w-2xl",
)}
>
-
Upload Image
+
Upload Image
- Edit Text
+ Edit Text
{
// const fileName = file && getFileName(file).toUpperCase();
const wrapperClassName = twMerge(
- "group cursor-pointer px-6 py-12 bg-gray-100 hover:bg-gray-200/60 transition-colors duration-150 ease-in-out",
+ "group cursor-pointer px-6 py-12 bg-ui-controls hover:bg-white/25 transition-colors duration-150 ease-in-out rounded-lg",
!file && "flex flex-col items-center justify-center gap-",
file && "flex items-center gap-2 py-6",
// "rounded-lg border-2 border-dashed border-ui-border",
diff --git a/frontend/realtime/src/components/features/ToolbarButton.tsx b/frontend/realtime/src/components/features/ToolbarButton.tsx
index e8a37e01a0..a55724f2e3 100644
--- a/frontend/realtime/src/components/features/ToolbarButton.tsx
+++ b/frontend/realtime/src/components/features/ToolbarButton.tsx
@@ -44,12 +44,12 @@ export const ToolbarButton = ({
}
const mergedButtonClasses = twMerge(
- "rounded-lg py-2 px-3 hover:bg-gray-200/50 transition-all duration-100",
- children ? "w-fit flex items-center gap-2 text-nowrap" : "size-10",
- active && "pointer-events-none text-primary ",
+ "rounded-lg hover:bg-white/15 transition-all duration-100 border-2 border-transparent text-white/80 px-2",
+ children ? "w-fit flex items-center gap-2.5 text-nowrap" : "size-10",
+ active && "bg-primary/30 border-2 border-primary hover:bg-primary/30",
disabled && "pointer-events-none text-secondary-300",
buttonProps.prominent &&
- "highlight-button border border-primary-400/30 text-primary-500 hover:bg-primary-100/40 hover:border-primary-400/60",
+ "border border-primary-400/30 text-primary-500 hover:bg-primary-100/40 hover:border-primary-400/60",
customButtonClassNames,
);
@@ -57,6 +57,7 @@ export const ToolbarButton = ({
{
e.preventDefault();
@@ -73,7 +74,11 @@ export const ToolbarButton = ({
);
if (tooltip) {
- return {Button} ;
+ return (
+
+ {Button}
+
+ );
}
return Button;
};
diff --git a/frontend/realtime/src/components/features/ToolbarMain/ToolbarMain.tsx b/frontend/realtime/src/components/features/ToolbarMain/ToolbarMain.tsx
index 6b0fbe50a7..85376fa91c 100644
--- a/frontend/realtime/src/components/features/ToolbarMain/ToolbarMain.tsx
+++ b/frontend/realtime/src/components/features/ToolbarMain/ToolbarMain.tsx
@@ -4,14 +4,13 @@ import {
faCircle,
faEraser,
faFilePlus,
- faFloppyDisk,
faImage,
faLocationArrow,
faPaintbrush,
faShapes,
faSquare,
faText,
- faTriangle
+ faTriangle,
} from "@fortawesome/pro-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { Popover, PopoverButton, PopoverPanel } from "@headlessui/react";
@@ -41,10 +40,11 @@ export const ToolbarMain = ({
<>
@@ -61,38 +61,70 @@ export const ToolbarMain = ({
/>
-
-
-
-
-
-
-
-
-
-
+ {({ close }) => (
+ <>
+
+
+
+
+
+
+ {
+ buttonProps.ADD_SQUARE.onClick?.(e);
+ close();
+ },
+ }}
+ />
+ {
+ buttonProps.ADD_CIRCLE.onClick?.(e);
+ close();
+ },
+ }}
+ />
+ {
+ buttonProps.ADD_TRIANGLE.onClick?.(e);
+ close();
+ },
+ }}
+ />
+
+ >
+ )}
@@ -102,22 +134,21 @@ export const ToolbarMain = ({
anchor="right"
className={twMerge(
// "absolute bottom-full left-1/2 z-10 mb-2 -translate-x-1/2",
- "flex [--anchor-gap:16px]",
+ "flex [--anchor-gap:12px]",
paperWrapperStyles,
)}
>
- Add Image
+ Add Image
{/*
Add Video
*/}
-
-
+
-
+
-
+ /> */}
>
diff --git a/frontend/realtime/src/components/features/ToolbarTopLeft/index.tsx b/frontend/realtime/src/components/features/ToolbarTopLeft/index.tsx
index 423f4fc03e..8baad99e5f 100644
--- a/frontend/realtime/src/components/features/ToolbarTopLeft/index.tsx
+++ b/frontend/realtime/src/components/features/ToolbarTopLeft/index.tsx
@@ -1,28 +1,27 @@
import { twMerge } from "tailwind-merge";
-import { paperWrapperStyles } from "~/components/styles";
-import { faPlus, faQuestion } from "@fortawesome/pro-solid-svg-icons";
-import { ToolbarButton } from "~/components/features/ToolbarButton";
+// import { paperWrapperStyles } from "~/components/styles";
+// import { faPlus, faQuestion } from "@fortawesome/pro-solid-svg-icons";
+// import { ToolbarButton } from "~/components/features/ToolbarButton";
export const ToolbarTopLeft = () => {
return (
-
+ {/*
New Board
Help
-
+ */}
);
};
diff --git a/frontend/realtime/src/components/features/ToolbarTopRight/index.tsx b/frontend/realtime/src/components/features/ToolbarTopRight/index.tsx
new file mode 100644
index 0000000000..0bf8ef8c09
--- /dev/null
+++ b/frontend/realtime/src/components/features/ToolbarTopRight/index.tsx
@@ -0,0 +1,31 @@
+import { faSave } from "@fortawesome/pro-solid-svg-icons";
+import { twMerge } from "tailwind-merge";
+import { Button } from "~/components/ui/Button";
+import { toolbarMain } from "~/signals/uiAccess/toolbarMain";
+import { dispatchers } from "~/signals/uiEvents/toolbarMain";
+import { ToolbarMainButtonNames } from "../ToolbarMain/enum";
+
+// import { paperWrapperStyles } from "~/components/styles";
+// import { faPlus, faQuestion } from "@fortawesome/pro-solid-svg-icons";
+// import { ToolbarButton } from "~/components/features/ToolbarButton";
+
+export const ToolbarTopRight = () => {
+ const saveButtonState =
+ toolbarMain.signal.value.buttonStates[ToolbarMainButtonNames.SAVE];
+
+ return (
+
+
+ Save Image
+
+
+ );
+};
diff --git a/frontend/realtime/src/components/styles.ts b/frontend/realtime/src/components/styles.ts
index 85e626940d..b9d7325b97 100644
--- a/frontend/realtime/src/components/styles.ts
+++ b/frontend/realtime/src/components/styles.ts
@@ -1,26 +1,35 @@
import { twMerge } from "tailwind-merge";
export const paperWrapperStyles =
- "rounded-xl border border-ui-border bg-ui-panel p-2 shadow-lg";
+ "rounded-xl border border-ui-border p-1.5 shadow-lg bg-ui-panel";
export const transitionTimingStyles = "transition duration-150 ease-in-out";
export const dialogBackgroundStyles =
"fixed inset-0 flex w-screen items-center justify-center bg-black/50";
-export const toolTipStyles = twMerge(
- "relative",
- "before:w-0 before:h-0 before:absolute",
- "before:left-1/2 before:bottom-full before:mb-[1px] before:-translate-x-1/2 before:z-50",
- "before:border-l-8 before:border-l-transparent",
- "before:border-r-8 before:border-r-transparent",
- "before:border-t-8 before:border-t-white",
- "after:absolute after:left-1/2 after:bottom-full after:-translate-x-1/2 after:z-40",
- "after:content-[attr(data-tooltip)] after:text-black after:text-nowrap",
- "after:rounded-lg after:border after:border-ui-border after:bg-ui-panel after:px-2.5 after:py-1.5 after:mb-2 after:shadow-xl",
- "after:hidden before:hidden hover:after:block hover:before:block",
-);
+export const toolTipStyles = {
+ base: twMerge(
+ "relative",
+ "after:absolute after:z-40",
+ "after:content-[attr(data-tooltip)] after:text-black after:text-nowrap after:text-sm after:font-medium after:text-white/80 after:glass",
+ "after:rounded-lg after:border after:border-ui-border after:bg-ui-panel after:px-2.5 after:py-1 after:shadow-xl",
+ "after:hidden hover:after:block",
+ ),
+ top: twMerge(
+ "after:left-1/2 after:bottom-full after:-translate-x-1/2 after:mb-3.5",
+ ),
+ bottom: twMerge(
+ "after:left-1/2 after:top-full after:-translate-x-1/2 after:mt-3.5",
+ ),
+ left: twMerge(
+ "after:top-1/2 after:right-full after:-translate-y-1/2 after:mr-3.5",
+ ),
+ right: twMerge(
+ "after:top-1/2 after:left-full after:-translate-y-1/2 after:ml-3.5",
+ ),
+};
export const dialogPanelStyles = twMerge(
- "flex max-w-5xl flex-col justify-between gap-4 p-6",
+ "flex max-w-5xl flex-col justify-between gap-4 p-6 bg-[#1C1C20]",
);
diff --git a/frontend/realtime/src/components/ui/Button.tsx b/frontend/realtime/src/components/ui/Button.tsx
index 709a37a969..5e3deb69f6 100644
--- a/frontend/realtime/src/components/ui/Button.tsx
+++ b/frontend/realtime/src/components/ui/Button.tsx
@@ -31,14 +31,14 @@ export const Button = ({
return "bg-tertiary hover:bg-tertiary-400 text-white focus-visible:outline-tertiary-600";
}
case "secondary": {
- return "bg-gray-600 hover:bg-gray-500 text-white focus-visible:outline-secondary";
+ return "bg-ui-controls hover:bg-ui-controls/80 text-white focus-visible:outline-secondary";
}
case "action": {
return " bg-action hover:bg-action-500 text-white focus-visible:outline-action";
}
case "primary":
default: {
- return "bg-primary hover:bg-primary-400 text-white focus-visible:outline-primary-600";
+ return "bg-primary hover:bg-primary-600 text-white focus-visible:outline-primary-600";
}
}
}
diff --git a/frontend/realtime/src/components/ui/ComboBox.tsx b/frontend/realtime/src/components/ui/ComboBox.tsx
index dd9717dbaf..9c5b8c3889 100644
--- a/frontend/realtime/src/components/ui/ComboBox.tsx
+++ b/frontend/realtime/src/components/ui/ComboBox.tsx
@@ -29,25 +29,25 @@ export const Combobox = ({ options, value, onChange }: ComboBoxInterface) => {
onChange={onChange}
onClose={() => setQuery("")}
>
-
+
font}
onChange={(event) => setQuery(event.target.value)}
/>
-
-
+
+
{filteredOptions.map((option, idx) => (
{option}
diff --git a/frontend/realtime/src/components/ui/Slider.tsx b/frontend/realtime/src/components/ui/Slider.tsx
index 5b756b81dc..8cded41ee5 100644
--- a/frontend/realtime/src/components/ui/Slider.tsx
+++ b/frontend/realtime/src/components/ui/Slider.tsx
@@ -12,6 +12,7 @@ interface SliderProps {
showTooltip?: boolean;
tooltipContent?: ReactNode;
suffix?: string;
+ innerLabel?: string;
}
export const Slider = ({
@@ -24,6 +25,7 @@ export const Slider = ({
showTooltip,
tooltipContent,
suffix,
+ innerLabel,
}: SliderProps) => {
const [localValue, setLocalValue] = useState(value);
const sliderRef = useRef(null);
@@ -88,25 +90,40 @@ export const Slider = ({
-
+ style={{ width: `${percentage}%` }}
+ >
+ {innerLabel && (
+
+ {innerLabel}
+
+ )}
+
+
+
{showTooltip && (
{
@@ -27,7 +27,6 @@ export const Textarea = forwardRef(
{ className, label, resize = "vertical", id, ...rest }: TextareaInterface,
ref,
) => {
-
const resizeStyle = resizeStyles[resize];
return (
@@ -38,17 +37,16 @@ export const Textarea = forwardRef(
ref={ref}
id={id ? id : label ? kebabCase(label) : undefined}
className={twMerge(
- "border-ui-panel-border bg-ui-controls rounded-lg border px-3 py-2",
+ "rounded-lg border border-ui-border px-4 py-2.5 text-white outline-none focus:outline-none",
className,
resizeStyle,
)}
style={{
outline: "2px solid transparent",
- transition: "outline-color 0.15s ease-in-out",
}}
onFocus={(e) => {
// disableHotkeyInput(DomLevels.INPUT);
- e.currentTarget.style.outlineColor = "#e66462";
+ e.currentTarget.style.outlineColor = "#2d81ff";
}}
onBlur={(e) => {
// enableHotkeyInput(DomLevels.INPUT);
diff --git a/frontend/realtime/src/components/ui/TextEditor/ButtonsAlignment.tsx b/frontend/realtime/src/components/ui/TextEditor/ButtonsAlignment.tsx
index 4e95e20e54..f065b0bce9 100644
--- a/frontend/realtime/src/components/ui/TextEditor/ButtonsAlignment.tsx
+++ b/frontend/realtime/src/components/ui/TextEditor/ButtonsAlignment.tsx
@@ -1,6 +1,6 @@
import {
faAlignCenter,
- faAlignJustify,
+ // faAlignJustify,
faAlignLeft,
faAlignRight,
} from "@fortawesome/pro-solid-svg-icons";
diff --git a/frontend/realtime/src/components/ui/TextEditor/ColorPicker.tsx b/frontend/realtime/src/components/ui/TextEditor/ColorPicker.tsx
index c56663236b..675224b63a 100644
--- a/frontend/realtime/src/components/ui/TextEditor/ColorPicker.tsx
+++ b/frontend/realtime/src/components/ui/TextEditor/ColorPicker.tsx
@@ -1,6 +1,10 @@
import { ChangeEvent, useState } from "react";
import { twMerge } from "tailwind-merge";
-import { faFont, faHashtag, IconDefinition } from "@fortawesome/pro-solid-svg-icons";
+import {
+ faFont,
+ faHashtag,
+ IconDefinition,
+} from "@fortawesome/pro-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { Popover, PopoverButton, PopoverPanel } from "@headlessui/react";
import { HexColorPicker } from "react-colorful";
@@ -13,7 +17,7 @@ export const ColorPicker = ({
color: prevColor,
onChange,
faIcon = faFont,
- borderStyle = "border",
+ borderStyle,
showBar = true,
}: {
color: string;
@@ -53,12 +57,16 @@ export const ColorPicker = ({
return (
-
+
- {showBar && }
+ {showBar && (
+
+ )}
-
+
);
};
diff --git a/frontend/realtime/src/components/ui/TextEditor/styles.ts b/frontend/realtime/src/components/ui/TextEditor/styles.ts
index ce9c8287d4..773c40fa52 100644
--- a/frontend/realtime/src/components/ui/TextEditor/styles.ts
+++ b/frontend/realtime/src/components/ui/TextEditor/styles.ts
@@ -1,4 +1,4 @@
export const buttonGroupButton =
- "size-10 rounded-none bg-white text-black hover:bg-gray-200 data-[selected=true]:text-primary-400 disabled:hover:bg-transparent disabled:text-gray-400";
+ "size-10 rounded-none bg-ui-controls text-white/80 hover:bg-white/30 data-[selected=true]:text-white data-[selected=true]:bg-primary/30 disabled:hover:bg-transparent disabled:text-gray-400 border border-ui-border";
export const buttonGroupGrouper =
- "flex divide-x overflow-hidden rounded-md border";
+ "flex divide-x overflow-hidden rounded-md border border-ui-border";
diff --git a/frontend/realtime/src/components/ui/Tooltip.tsx b/frontend/realtime/src/components/ui/Tooltip.tsx
index 399fa03cb7..a36f8d0b68 100644
--- a/frontend/realtime/src/components/ui/Tooltip.tsx
+++ b/frontend/realtime/src/components/ui/Tooltip.tsx
@@ -7,15 +7,18 @@ export const Tooltip = ({
tip,
children,
forceShow,
+ position = "top",
}: {
tip: string;
children: ReactElement>;
forceShow?: boolean;
+ position?: "top" | "bottom" | "left" | "right";
}) => {
const clonedChildren = cloneElement(children, {
"data-tooltip": tip,
className: twMerge(
- toolTipStyles,
+ toolTipStyles.base,
+ toolTipStyles[position],
forceShow && "after:block before:block",
children.props.className,
),
diff --git a/frontend/realtime/tailwind.config.js b/frontend/realtime/tailwind.config.js
index 89288ba522..a6eecfa0c8 100644
--- a/frontend/realtime/tailwind.config.js
+++ b/frontend/realtime/tailwind.config.js
@@ -44,14 +44,15 @@ export default {
info: colors.sky[500],
// brand colors
- primary: storytellerColors.sunglo,
+ primary: storytellerColors.azureRadiance,
secondary: storytellerColors.gunpowder,
tertiary: storytellerColors.aquamarineBlue,
ui: {
- background: colors.zinc[100],
- panel: colors.white,
- border: colors.zinc[200],
+ background: "#101014",
+ panel: "#3E3E41",
+ border: "#FFFFFF0D",
+ controls: "#3E3E41",
},
},
backgroundImage: {
diff --git a/frontend/realtime/tailwind.stcolors.js b/frontend/realtime/tailwind.stcolors.js
index 39aeb42318..89fc13ed71 100644
--- a/frontend/realtime/tailwind.stcolors.js
+++ b/frontend/realtime/tailwind.stcolors.js
@@ -1,19 +1,19 @@
export const storytellerColors = {
- sunglo: {
- //sunglo
- DEFAULT: "#e66462", //=500
- 50: "#fdf3f3",
- 100: "#fce4e4",
- 200: "#facfce",
- 300: "#f6acab",
- 400: "#ef7c7a",
- 500: "#e66462",
- 600: "#cf3533",
- 700: "#ae2927",
- 800: "#902624",
- 900: "#782524",
- 950: "#410f0e",
+ azureRadiance: {
+ DEFAULT: "#2d81ff", //=500
+ 50: "#eef6ff",
+ 100: "#d9ebff",
+ 200: "#bcdcff",
+ 300: "#8ec7ff",
+ 400: "#59a7ff",
+ 500: "#2d81ff",
+ 600: "#1b63f5",
+ 700: "#144ee1",
+ 800: "#173fb6",
+ 900: "#19398f",
+ 950: "#142457",
},
+
gunpowder: {
DEFAULT: "#39394c", //=950
50: "#f5f6f9",