summaryrefslogtreecommitdiff
path: root/apps/web/src/effects/components
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/src/effects/components')
-rw-r--r--apps/web/src/effects/components/assets-view.tsx54
-rw-r--r--apps/web/src/effects/components/effects-tab.tsx7
2 files changed, 40 insertions, 21 deletions
diff --git a/apps/web/src/effects/components/assets-view.tsx b/apps/web/src/effects/components/assets-view.tsx
index 8c2ec85b..54817f54 100644
--- a/apps/web/src/effects/components/assets-view.tsx
+++ b/apps/web/src/effects/components/assets-view.tsx
@@ -7,13 +7,16 @@ import { effectsRegistry, EFFECT_TARGET_ELEMENT_TYPES } from "@/effects";
import { effectPreviewService } from "@/services/renderer/effect-preview";
import { useEditor } from "@/editor/use-editor";
import { buildEffectElement } from "@/timeline/element-utils";
-import type { EffectDefinition } from "@/effects/types";
+import type { EffectCategory, EffectDefinition } from "@/effects/types";
-export function EffectsView() {
- const effects = effectsRegistry.getAll();
+export function EffectsView({ category }: { category?: EffectCategory }) {
+ const all = effectsRegistry.getAll();
+ const effects = category
+ ? all.filter((effect) => effect.category === category)
+ : all;
return (
- <PanelView title="Effects">
+ <PanelView title={category === "lens" ? "Lens" : "Effects"}>
<EffectsGrid effects={effects} />
</PanelView>
);
@@ -124,18 +127,33 @@ function MotionPreviewCanvas({ effectType }: { effectType: string }) {
return;
}
- const inward = effectType === "zoom-out";
- const spread = size * 0.16;
- const reach = size * 0.3;
- for (const [dx, dy] of [
- [1, 1],
- [-1, -1],
- ] as const) {
- const innerX = center + dx * (inward ? reach : spread);
- const innerY = center + dy * (inward ? reach : spread) * 0.7;
- const outerX = center + dx * (inward ? spread : reach);
- const outerY = center + dy * (inward ? spread : reach) * 0.7;
- drawArrow({ context, fromX: innerX, fromY: innerY, toX: outerX, toY: outerY });
+ if (effectType === "zoom-in" || effectType === "zoom-out") {
+ const inward = effectType === "zoom-out";
+ const spread = size * 0.16;
+ const reach = size * 0.3;
+ for (const [dx, dy] of [
+ [1, 1],
+ [-1, -1],
+ ] as const) {
+ const innerX = center + dx * (inward ? reach : spread);
+ const innerY = center + dy * (inward ? reach : spread) * 0.7;
+ const outerX = center + dx * (inward ? spread : reach);
+ const outerY = center + dy * (inward ? spread : reach) * 0.7;
+ drawArrow({
+ context,
+ fromX: innerX,
+ fromY: innerY,
+ toX: outerX,
+ toY: outerY,
+ });
+ }
+ return;
+ }
+
+ for (const radius of [size * 0.14, size * 0.26]) {
+ context.beginPath();
+ context.arc(center, center, radius, 0, Math.PI * 2);
+ context.stroke();
}
}, [effectType]);
@@ -182,9 +200,7 @@ function EffectItem({ effect }: { effect: EffectDefinition }) {
effectType: effect.type,
targetElementTypes: EFFECT_TARGET_ELEMENT_TYPES,
}}
- onAddToTimeline={
- effect.supportsStandalone === false ? undefined : handleAddToTimeline
- }
+ onAddToTimeline={handleAddToTimeline}
aspectRatio={1}
isRounded
variant="card"
diff --git a/apps/web/src/effects/components/effects-tab.tsx b/apps/web/src/effects/components/effects-tab.tsx
index 102d818a..91ad1f42 100644
--- a/apps/web/src/effects/components/effects-tab.tsx
+++ b/apps/web/src/effects/components/effects-tab.tsx
@@ -25,7 +25,10 @@ import {
} from "@hugeicons/core-free-icons";
import { cn } from "@/utils/ui";
import { Separator } from "@/components/ui/separator";
-import { useAssetsPanelStore } from "@/components/editor/panels/assets/assets-panel-store";
+import {
+ getDefaultEffectsTab,
+ useAssetsPanelStore,
+} from "@/components/editor/panels/assets/assets-panel-store";
export function StandaloneEffectTab({
element,
@@ -222,7 +225,7 @@ function EmptyView() {
<Button
variant="default"
size="sm"
- onClick={() => setActiveTab("effects")}
+ onClick={() => setActiveTab(getDefaultEffectsTab())}
>
Open effects
</Button>