summaryrefslogtreecommitdiff
path: root/apps/web/src/components
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2025-08-16 11:36:55 +0200
committerMaze Winther <mazewinther@gmail.com>2025-08-16 11:36:55 +0200
commit96f3373fad61f6a4a67f4cd13960372e41991235 (patch)
treedfe7a27f3dac23f935de3c94c1a8eab9962322c8 /apps/web/src/components
parent354b6caedd815462914f033f004325ea97c501e2 (diff)
parente96682f89e2c72b55025b7fe38bf10cfabad0ca7 (diff)
downloadopencut-96f3373fad61f6a4a67f4cd13960372e41991235.tar.gz
Merge branch 'staging' of https://github.com/mazeincoding/AppCut into staging
Diffstat (limited to 'apps/web/src/components')
-rw-r--r--apps/web/src/components/editor/properties-panel/text-properties.tsx44
-rw-r--r--apps/web/src/components/footer.tsx8
2 files changed, 43 insertions, 9 deletions
diff --git a/apps/web/src/components/editor/properties-panel/text-properties.tsx b/apps/web/src/components/editor/properties-panel/text-properties.tsx
index a06624eb..744c2be5 100644
--- a/apps/web/src/components/editor/properties-panel/text-properties.tsx
+++ b/apps/web/src/components/editor/properties-panel/text-properties.tsx
@@ -6,7 +6,8 @@ import { useTimelineStore } from "@/stores/timeline-store";
import { Slider } from "@/components/ui/slider";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
-import { useState } from "react";
+import { Switch } from "@/components/ui/switch"; // Add Switch import
+import { useState, useRef } from "react";
import {
PropertyItem,
PropertyItemLabel,
@@ -30,6 +31,9 @@ export function TextProperties({
Math.round(element.opacity * 100).toString()
);
+ // Track the last selected color for toggling
+ const lastSelectedColor = useRef("#000000");
+
const parseAndValidateNumber = (
value: string,
min: number,
@@ -86,6 +90,20 @@ export function TextProperties({
updateTextElement(trackId, element.id, { opacity: opacityPercent / 100 });
};
+ // Update last selected color when a new color is picked
+ const handleColorChange = (color: string) => {
+ if (color !== "transparent") {
+ lastSelectedColor.current = color;
+ }
+ updateTextElement(trackId, element.id, { backgroundColor: color });
+ };
+
+ // Toggle between transparent and last selected color
+ const handleTransparentToggle = (isTransparent: boolean) => {
+ const newColor = isTransparent ? "transparent" : lastSelectedColor.current;
+ updateTextElement(trackId, element.id, { backgroundColor: newColor });
+ };
+
return (
<div className="space-y-6 p-5">
<Textarea
@@ -220,21 +238,31 @@ export function TextProperties({
/>
</PropertyItemValue>
</PropertyItem>
- <PropertyItem direction="row">
- <PropertyItemLabel>Background</PropertyItemLabel>
+ <PropertyItem direction="column">
+ <div className="flex items-center justify-between">
+ <PropertyItemLabel>Background</PropertyItemLabel>
+ <div className="flex items-center space-x-2">
+ <Switch
+ id="transparent-bg-toggle"
+ checked={element.backgroundColor === "transparent"}
+ onCheckedChange={handleTransparentToggle}
+ />
+ <label htmlFor="transparent-bg-toggle" className="text-sm font-medium">
+ Transparent
+ </label>
+ </div>
+ </div>
<PropertyItemValue>
<Input
type="color"
value={
element.backgroundColor === "transparent"
- ? "#000000"
+ ? lastSelectedColor.current
: element.backgroundColor || "#000000"
}
- onChange={(e) => {
- const backgroundColor = e.target.value;
- updateTextElement(trackId, element.id, { backgroundColor });
- }}
+ onChange={(e) => handleColorChange(e.target.value)}
className="w-full cursor-pointer rounded-full"
+ disabled={element.backgroundColor === "transparent"}
/>
</PropertyItemValue>
</PropertyItem>
diff --git a/apps/web/src/components/footer.tsx b/apps/web/src/components/footer.tsx
index a7aa724f..0087502e 100644
--- a/apps/web/src/components/footer.tsx
+++ b/apps/web/src/components/footer.tsx
@@ -36,7 +36,13 @@ export function Footer() {
{/* Brand Section */}
<div className="md:col-span-1 max-w-sm">
<div className="flex justify-start items-center gap-2 mb-4">
- <Image src="/logo.svg" alt="OpenCut" width={24} height={24} />
+ <Image
+ src="/logo.svg"
+ alt="OpenCut"
+ width={24}
+ height={24}
+ className="invert dark:invert-0"
+ />
<span className="font-bold text-lg">OpenCut</span>
</div>
<p className="text-sm md:text-left text-muted-foreground mb-5">