import { Textarea } from "@/components/ui/textarea"; import { FontPicker } from "@/components/ui/font-picker"; import type { TextElement } from "@/types/timeline"; import { NumberField } from "@/components/ui/number-field"; import { useRef } from "react"; import { Section, SectionContent, SectionField, SectionFields, SectionHeader, SectionTitle, } from "./section"; import { ColorPicker } from "@/components/ui/color-picker"; import { Button } from "@/components/ui/button"; import { uppercase } from "@/utils/string"; import { clamp } from "@/utils/math"; import { useEditor } from "@/hooks/use-editor"; import { DEFAULT_COLOR } from "@/constants/project-constants"; import { CORNER_RADIUS_MAX, CORNER_RADIUS_MIN, DEFAULT_LETTER_SPACING, DEFAULT_LINE_HEIGHT, DEFAULT_TEXT_BACKGROUND, DEFAULT_TEXT_ELEMENT, MAX_FONT_SIZE, MIN_FONT_SIZE, } from "@/constants/text-constants"; import { usePropertyDraft } from "./hooks/use-property-draft"; import { useKeyframedColorProperty } from "./hooks/use-keyframed-color-property"; import { useKeyframedNumberProperty } from "./hooks/use-keyframed-number-property"; import { useElementPlayhead } from "./hooks/use-element-playhead"; import { TransformSection, BlendingSection } from "./sections"; import { KeyframeToggle } from "./keyframe-toggle"; import { isPropertyAtDefault } from "./sections/transform"; import { resolveColorAtTime, resolveNumberAtTime } from "@/lib/animation"; import { HugeiconsIcon } from "@hugeicons/react"; import { TextFontIcon, ViewIcon, ViewOffSlashIcon, } from "@hugeicons/core-free-icons"; import { OcTextHeightIcon, OcTextWidthIcon } from "@opencut/ui/icons"; import { cn } from "@/utils/ui"; export function TextProperties({ element, trackId, }: { element: TextElement; trackId: string; }) { return (
); } function ContentSection({ element, trackId, }: { element: TextElement; trackId: string; }) { const editor = useEditor(); const content = usePropertyDraft({ displayValue: element.content, parse: (input) => input, onPreview: (value) => editor.timeline.previewElements({ updates: [ { trackId, elementId: element.id, updates: { content: value } }, ], }), onCommit: () => editor.timeline.commitPreview(), }); return (
Content