feat(studio): Phase 4 v1 — FlexStory block-field editor

Scene-engine (FLEXIBLE) projects now get a clean per-field content editor instead
of the Konva layer panel. The scoping confirmed content VALUES already flow to
saved_scene_contents via the existing `c-`-layer + updateLayer + autosave path —
so this is purely a cleaner presentation over the working save path, no new
persistence.

- isFlexStoryProject(chooseMode) helper (FLEXIBLE → scene engine).
- BlockFieldForm: renders one labelled field per content layer (label from
  layer.name — the field's Persian label, already preserved from the content
  title), text→textarea, image→upload; writes back via the unchanged
  updateLayer(props) call. No Konva geometry/layer chrome.
- StudioSidebarContent: the "scenes" tool branches on chooseMode — FlexStory →
  BlockFieldForm, AE/Konva → SceneEditSidebarContent (zero regression).
- i18n: componentsStudioSidebarBlockFieldForm in fa + en.

Verified `npm run build`. NOTE: preview stays the live Konva canvas for v1 (a true
@remotion/player embed is deferred — 8–12MB Three.js bundle). Remaining: confirm
the FlexStory render binder reads the 4 theme colours from scene_data (already
persisted) vs saved_shared_colors (would need a small colours endpoint).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-23 15:40:32 +03:30
parent 383331e8f1
commit c1747167f3
5 changed files with 197 additions and 1 deletions
+8
View File
@@ -1189,6 +1189,14 @@
"replaceImage": "Replace image",
"uploadImage": "Upload image"
},
"componentsStudioSidebarBlockFieldForm": {
"panelTitle": "Edit Scene",
"emptyState": "This scene has no editable fields.",
"fieldFallback": "Field {index}",
"textPlaceholder": "Type here…",
"replaceImage": "Replace image",
"uploadImage": "Upload image"
},
"componentsStudioSidebarTransitionsSidebarContent": {
"heading": "Transitions",
"randomTransition": "Random Transition",
+8
View File
@@ -1189,6 +1189,14 @@
"replaceImage": "جایگزینی تصویر",
"uploadImage": "بارگذاری تصویر"
},
"componentsStudioSidebarBlockFieldForm": {
"panelTitle": "ویرایش صحنه",
"emptyState": "این صحنه فیلد قابل‌ویرایشی ندارد.",
"fieldFallback": "فیلد {index}",
"textPlaceholder": "اینجا بنویسید…",
"replaceImage": "جایگزینی تصویر",
"uploadImage": "بارگذاری تصویر"
},
"componentsStudioSidebarTransitionsSidebarContent": {
"heading": "ترانزیشن‌ها",
"randomTransition": "ترانزیشن تصادفی",