diff --git a/frontend/realtime/src/KonvaApp/Nodes/BaseNode.ts b/frontend/realtime/src/KonvaApp/Nodes/BaseNode.ts index c49f5b4bb3..1c749c4444 100644 --- a/frontend/realtime/src/KonvaApp/Nodes/BaseNode.ts +++ b/frontend/realtime/src/KonvaApp/Nodes/BaseNode.ts @@ -166,7 +166,7 @@ export abstract class BaseNode { // https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/which // 3: Right mouse button // If right click, let context event handle it - if (e.evt.button === 3) { + if (e.evt.button === 2) { return; } @@ -182,7 +182,7 @@ export abstract class BaseNode { // https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/which // 3: Right mouse button // If right click, let context event handle it - if (e.evt.button === 3) { + if (e.evt.button === 2) { return; } diff --git a/frontend/realtime/src/KonvaApp/Nodes/ShapeNode.ts b/frontend/realtime/src/KonvaApp/Nodes/ShapeNode.ts index 8227f76142..6e772a5648 100644 --- a/frontend/realtime/src/KonvaApp/Nodes/ShapeNode.ts +++ b/frontend/realtime/src/KonvaApp/Nodes/ShapeNode.ts @@ -30,6 +30,7 @@ export class ShapeNode extends NetworkedNode { public shapeType: ShapeType; public size: number; + public color: string; constructor({ canvasPosition, @@ -171,6 +172,7 @@ export class ShapeNode extends NetworkedNode { this.shapeType = shapeType; this.size = size; + this.color = color; // Add shape to group const centerPosition = NodeUtilities.positionNodeOnCanvasCenter({ diff --git a/frontend/realtime/src/KonvaApp/NodesManagers/SelectionManager.ts b/frontend/realtime/src/KonvaApp/NodesManagers/SelectionManager.ts index 0d792dd79d..3e35151d19 100644 --- a/frontend/realtime/src/KonvaApp/NodesManagers/SelectionManager.ts +++ b/frontend/realtime/src/KonvaApp/NodesManagers/SelectionManager.ts @@ -289,7 +289,7 @@ export class SelectionManager { knodeIds: [node.kNode.id()], locked: node.isLocked(), buttonStates: getShapeNodeButtonStates({ locked: node.isLocked() }), - color: node.getNodeData({ x: 0, y: 0 })?.textNodeData?.color ?? "#000000", + color: node.color }); } else if (node instanceof TextNode) { diff --git a/frontend/realtime/src/KonvaRootComponent/ContextualToolbarNode.tsx b/frontend/realtime/src/KonvaRootComponent/ContextualToolbarNode.tsx index e02482ba7c..fc722be0ae 100644 --- a/frontend/realtime/src/KonvaRootComponent/ContextualToolbarNode.tsx +++ b/frontend/realtime/src/KonvaRootComponent/ContextualToolbarNode.tsx @@ -8,6 +8,7 @@ import { dispatchUiEvents } from "~/signals/uiEvents"; import { ToolbarNode } from "~/components/features/ToolbarNode"; import { ToolbarNodeButtonNames } from "~/components/features/ToolbarNode/enums"; import { transitionTimingStyles } from "~/components/styles"; +import { useSignals } from "@preact/signals-react/runtime"; export const ContextualToolbarNode = () => { const [winSize, setWinSize] = useState<{ width: number; height: number }>({ @@ -64,6 +65,9 @@ export const ContextualToolbarNode = () => { dispatchUiEvents.toolbarNode.setSelectedColor({ kNodeId: nodeID, color }); } + useSignals(); + const color = uiAccess.toolbarNode.signal.value.color; + const boundedTopPosition = Math.min(position.y, winSize.height - 164); return ( { onLockClicked={(e) => { dispatchUiEvents.toolbarNode.lock(e); }} - color={uiAccess.toolbarNode.signal.value.color} + color={color} onColorChange={handleColorChange} /> diff --git a/frontend/realtime/src/components/features/ToolbarNode/ToolbarNode.tsx b/frontend/realtime/src/components/features/ToolbarNode/ToolbarNode.tsx index 6080456108..09747f017a 100644 --- a/frontend/realtime/src/components/features/ToolbarNode/ToolbarNode.tsx +++ b/frontend/realtime/src/components/features/ToolbarNode/ToolbarNode.tsx @@ -14,6 +14,7 @@ import { paperWrapperStyles, toolTipStyles } from "~/components/styles"; import { ToolbarNodeButtonNames } from "./enums"; import { ToolbarNodeButtonData } from "./data"; import { ColorPicker } from "~/components/ui/TextEditor/ColorPicker"; +import { DEFAULT_PAINT_COLOR } from "~/signals/uiEvents/toolbarMain/paintMode"; export interface ToolbarNodeProps { disabled?: boolean; @@ -35,7 +36,7 @@ export const ToolbarNode = ({ lockDisabled, onLockClicked, buttonsProps, - color = "#000000", + color = DEFAULT_PAINT_COLOR, onColorChange = () => { }, }: ToolbarNodeProps) => { const handleOnLockClicked: React.MouseEventHandler = ( @@ -46,12 +47,13 @@ export const ToolbarNode = ({ } }; const lockDisabledOrUnknown = lockDisabled || locked === "unknown"; + const lockText = locked === "unknown" ? "Unavailable" : locked ? "Unlock" : "Lock" return (
+ > + {lockText} + {ToolbarNodeButtonData.map((buttonDatum, idx) => { const buttonProps = buttonsProps?.[buttonDatum.name]; @@ -87,14 +89,18 @@ export const ToolbarNode = ({ return ( + buttonProps={{ ...buttonProps, className: "w-full p-2" }} + > + {buttonDatum.tooltip} + + ); } else { return ( - + + {buttonDatum.tooltip} + ) } })} diff --git a/frontend/realtime/src/components/ui/TextEditor/ColorPicker.tsx b/frontend/realtime/src/components/ui/TextEditor/ColorPicker.tsx index ac7abf3067..197f5079d7 100644 --- a/frontend/realtime/src/components/ui/TextEditor/ColorPicker.tsx +++ b/frontend/realtime/src/components/ui/TextEditor/ColorPicker.tsx @@ -26,6 +26,7 @@ export const ColorPicker = ({ streamChanges = false, defaultOpen = false, closeOnMouseLeave = false, + children, }: { color: string; onChange: (newColor: string) => void; @@ -39,6 +40,7 @@ export const ColorPicker = ({ streamChanges?: boolean; defaultOpen?: boolean; closeOnMouseLeave?: boolean; + children?: React.ReactNode; }) => { const [isOpen, setIsOpen] = useState(defaultOpen); const [{ currColor, textInput }, setStates] = useState<{ @@ -87,8 +89,8 @@ export const ColorPicker = ({ defaultOpen && setIsOpen(true)} @@ -97,6 +99,7 @@ export const ColorPicker = ({ icon={faIcon} color={staticIconColor ?? (fillBg ? undefined : prevColor)} /> + {children} {showBar && ( ({ locked: false, lockDisabled: false, buttonStates: initButtonStates(), - color: "#000000", + color: DEFAULT_PAINT_COLOR, }); export const toolbarNode = {