Commit Graph

2401 Commits

Author SHA1 Message Date
Vance Ingalls fa4d5790fe fix(studio): restore capitalize, end-align, live-commit size, and autofocus in flat Text
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 22:15:08 -07:00
Vance Ingalls 7b321ac021 fix(studio): restore zero-strength revive, keyboard hold, and HDR detail in flat Grade 2026-07-09 22:06:14 -07:00
Vance Ingalls e227020442 docs(studio): fix stale radius-row comment after unlink fix 2026-07-09 22:00:20 -07:00
Vance Ingalls 13c4aa4461 fix(studio): restore stroke color, radius unlink, and mask inset in flat Style 2026-07-09 21:54:27 -07:00
Vance Ingalls cabe45e7a9 fix(studio): retire legacy Style and Grade sections from flat inspector
The flat inspector rendered its new Style/Grade groups AND the legacy
ColorGradingSection/StyleSections components a second time below them,
visibly doubling every control. Remove the now-redundant legacy render
call sites (and their now-unused imports) from PropertyPanelFlat.tsx;
those components stay intact for the legacy (flag-off) PropertyPanel.
2026-07-09 20:37:59 -07:00
Vance Ingalls f3389dc775 feat(studio): flatten multi-field Text, retiring TextSection fallback
FlatTextSection's multi-field branch (textFields.length > 1) now renders
FlatTextLayerList (Task 5) + the existing single-field FlatTextFieldEditor
for the active field, tracked via new local activeFieldKey state that
resyncs (useEffect) when the active field disappears from props. This
retires the legacy TextSection delegation entirely for that case; the
TextSection import is removed from propertyPanelFlatTextSection.tsx since
nothing else in the file referenced it.

Also updates propertyPanelSections.test.tsx and PropertyPanel.test.tsx,
which exercised/documented the old multi-field-falls-back-to-legacy-
TextSection behavior in comments and test titles — reworded to describe
the new flat path (assertions were already compatible and still pass).

Flag for reviewer: hideOwnHeading on the legacy TextSection component
(propertyPanelSections.tsx) was added in an earlier plan specifically for
this now-removed call site. It has no remaining consumer after this task
lands (PropertyPanel.tsx's legacy caller doesn't pass it). Left in place
per brief instruction — not deleting unilaterally, since that's a scope
decision for whoever reviews this task.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 18:21:29 -07:00
Vance Ingalls e5da895869 test(studio): assert stopPropagation prevents onSelect on remove click
Review proved the existing test didn't catch a broken stopPropagation
by temporarily removing it and confirming the suite still passed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 18:11:39 -07:00
Vance Ingalls ea6464d46d feat(studio): add FlatTextLayerList for multi-field text
Originated layout, no design mock exists — flag for design review.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 18:03:06 -07:00
Vance Ingalls 264d855caa test(studio): rename unpin test to match what it actually verifies
Review of the pin-aware group list refactor flagged the test name
claiming the group "closes" on unpin — it doesn't assert that, and
structurally the group re-opens (togglePin never touches openGroupId).
Retitled to describe only the return-to-stack behavior actually tested.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 17:49:19 -07:00
Vance Ingalls 493a171fb5 feat(studio): render pinned groups first with a persisted, per-element-kind pin zone 2026-07-09 17:42:27 -07:00
Vance Ingalls 5000070e86 feat(studio): add PinnedGroupRow always-open pinned-group primitive 2026-07-09 17:31:23 -07:00
Vance Ingalls bb18e15452 feat(studio): add usePersistedPinnedGroups hook
Reads/writes the per-element-kind pinned-groups map added to
studioUiPreferences in the prior task, read-modify-writing the whole
map since writeStudioUiPreferences only shallow-merges top-level keys.
2026-07-09 16:19:55 -07:00
Vance Ingalls c32c871163 feat(studio): persist per-element-type pinned groups in studioUiPreferences
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 16:13:58 -07:00
Vance Ingalls a9409d1580 feat(studio): wire the flat Grade group into the one-open accordion
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 16:01:35 -07:00
Vance Ingalls 4e81bd7c5d feat(studio): add HDR warning banner and Apply-to-scope row, completing FlatColorGradingSection
Also adds a not-busy click assertion for the Apply button so
onApplyToScope is exercised end-to-end, not just its disabled state.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 15:55:16 -07:00
Vance Ingalls 78b191f41a feat(studio): add Blur and Pixelate effect sliders 2026-07-09 15:51:03 -07:00
Vance Ingalls 06ce697336 feat(studio): add Vignette and Grain rows with tuned-settings sub-panel
Also hoists the pointerdown-drag/reset-click test scaffold shared by the
new Roundness tests and the existing Contrast/Exposure tests into helpers
(findRowByText/dragSliderTrack/clickSliderReset), and exempts pre-existing,
branch-inherited fallow findings unrelated to this task (TextFieldEditor
complexity from earlier Text-inspector commits; test-scaffold duplication
across four flat-inspector-series test files from Plans 2-4) via
.fallowrc.jsonc, per this repo's established convention for line-shift/
inherited findings.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 15:46:06 -07:00
Vance Ingalls 8191a137e5 refactor(studio): collapse dead-branch scale ternary in Adjust sliders
Review of Task 6 flagged the exposure/other-key scale ternary as always
resolving to 100 on both arms.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 15:24:23 -07:00
Vance Ingalls 4aba5e6454 feat(studio): add the 10 Adjust sliders to FlatColorGradingSection 2026-07-09 15:18:02 -07:00
Vance Ingalls 95327e282d feat(studio): add FlatColorGradingSection Preset and Custom LUT rows 2026-07-09 15:11:33 -07:00
Vance Ingalls 1615551e4f feat(studio): add FlatColorGradingAccessory (compare, status dot, reset) 2026-07-09 14:57:56 -07:00
Vance Ingalls 7da7779313 feat(studio): widen FlatSelectRow options to support label!=value entries 2026-07-09 14:53:05 -07:00
Vance Ingalls 191bc5905f feat(studio): add centerTick and reset-slot to FlatSlider for bipolar grade rows 2026-07-09 14:48:49 -07:00
Vance Ingalls 46c9f92ec5 refactor(studio): extract useColorGradingController from ColorGradingSection 2026-07-09 14:34:52 -07:00
Vance Ingalls 4b9c3cf66f feat(studio): wire the flat Media group into the one-open accordion 2026-07-09 14:21:03 -07:00
Vance Ingalls 138fcdfc94 feat(studio): add fit/position rows to FlatMediaSection 2026-07-09 14:11:17 -07:00
Vance Ingalls a3fc24f469 feat(studio): add loop/muted/has-audio-track toggles to FlatMediaSection 2026-07-09 14:06:24 -07:00
Vance Ingalls 915e7d469f feat(studio): add volume/rate/media-start sliders to FlatMediaSection 2026-07-09 13:57:12 -07:00
Vance Ingalls c4138f7b69 feat(studio): add cutout sub-block to FlatMediaSection 2026-07-09 13:46:19 -07:00
Vance Ingalls f47e02cb29 feat(studio): add FlatMediaSection scaffold + source/copy row 2026-07-09 13:35:46 -07:00
Vance Ingalls 07a51f4c7b feat(studio): add FlatToggle primitive 2026-07-09 13:27:16 -07:00
Vance Ingalls bb1be1f900 fix(studio): recompute keyframe currentPct from the corrected timing basis in the flat Layout group
Follow-up to 684ec4e87: that fix corrected the seek target for Layout's
keyframe gutter via deriveElementTiming, but currentPct — which drives
KeyframeNavigation's diamond active/inactive state and prev/next arrow
targeting — still used PropertyPanel's naive elStart=0/elDuration=1
basis. For an element with animations but no explicit data-duration,
seeking to a keyframe's real absolute time no longer lit that
keyframe's diamond as active, and the prev/next arrows targeted the
wrong keyframes.

Thread currentTime into PropertyPanelFlat (swapping the now-redundant
currentPct prop 1-for-1, so PropertyPanel.tsx's line count is
unchanged) and recompute currentPct there from the same
deriveElementTiming basis already used for the seek fix.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 13:17:42 -07:00
Vance Ingalls 684ec4e875 fix(studio): reconcile keyframe-seek timing basis between flat Layout and Motion groups
Whole-plan coherence review (Plan 3a Layout + Plan 3b Motion) found that
Layout's keyframe gutter and Motion's Timing row independently derived an
element's start/duration and disagreed whenever an element had animations
but no explicit data-duration: Motion correctly inferred the range from the
element's GSAP tweens, while Layout's keyframe gutter fell back to a naive
`duration ?? 1`, so clicking a keyframe percentage in Layout could seek to a
different absolute time than what Motion's Timing row displayed.

Extract deriveElementTiming (propertyPanelFlatTimingDerivation.ts) as the
single shared basis both paths now consume: FlatTimingRow (Motion) and
PropertyPanelFlat's own elStart/elDuration (Layout's keyframe gutter and 3D
Transform block). PropertyPanelFlat now recomputes this basis itself from
its own element/gsapAnimations props instead of trusting the parent's naive
value, so PropertyPanel.tsx (and its legacy non-flat panel) is untouched.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 12:58:00 -07:00
Vance Ingalls 710a2488f1 feat(studio): wire the flat Motion group into the one-open accordion 2026-07-09 12:33:34 -07:00
Vance Ingalls 59e178019c feat(studio): compose FlatMotionSection from Timing and the flat effect-card list 2026-07-09 12:15:14 -07:00
Vance Ingalls b53db878a4 feat(studio): add flat collapsed-header variant to AnimationCard 2026-07-09 12:06:31 -07:00
Vance Ingalls f925bf60e5 feat(studio): add FlatTimingRow for the flat Motion group 2026-07-09 11:55:16 -07:00
Vance Ingalls 382989a06c feat(studio): wire the flat Layout group into the one-open accordion
Thread the Layout-group values through PropertyPanel -> PropertyPanelFlat
and add the third FlatGroup to the one-open/pin accordion (unconditional,
matching legacy Layout). Default-open Layout when neither Text nor Style
applies.

Fix the Flex double-render: the legacy StyleSections still renders its own
Flex Section, and the new flat Layout group renders its own LayoutFlexBlock.
Add an additive optional hideFlex prop to StyleSections and pass it on the
flat path so Flex renders exactly once (from the flat Layout group). Non-flat
callers omit it and are unchanged.

Extract the shared onLivePreviewProps closure into gsapLivePreview.ts (it was
duplicated inline in the legacy path) so PropertyPanel.tsx stays within the
600-LOC studio gate.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 11:52:16 -07:00
Vance Ingalls 58f2b1bbaa feat(studio): compose FlatLayoutSection from geometry, z-index, flex, and 3D blocks 2026-07-09 11:52:15 -07:00
Vance Ingalls 00553e8cea feat(studio): nest the existing 3D transform sub-view in a flat wrapper 2026-07-09 11:52:15 -07:00
Vance Ingalls 2c31fa185f feat(studio): add flat Layout Z-index row and Flex sub-block
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 11:52:15 -07:00
Vance Ingalls 411735f4f2 feat(studio): add flat Layout geometry rows (X/Y/W/H/Angle) with keyframe gutters 2026-07-09 11:52:15 -07:00
Vance Ingalls ec3ad428fb feat(studio): wire the flat Style group into the one-open accordion 2026-07-09 11:52:15 -07:00
Vance Ingalls a5c8d39090 feat(studio): add flat Opacity slider, completing the Style group 2026-07-09 11:52:15 -07:00
Vance Ingalls 62b5fafca8 feat(studio): add flat Overflow and Mask rows to the Style group 2026-07-09 11:52:15 -07:00
Vance Ingalls bc9651284e feat(studio): add flat Layer blur and Backdrop sliders to the Style group 2026-07-09 11:52:14 -07:00
Vance Ingalls 1d7d8aaa5d feat(studio): add flat Shadow and Blend rows to the Style group 2026-07-09 11:52:14 -07:00
Vance Ingalls fbc3036a54 feat(studio): add flat Stroke and Radius rows to the Style group 2026-07-09 11:52:14 -07:00
Vance Ingalls 7738a67ddb feat(studio): add FlatStyleSection with the flat Fill sub-block 2026-07-09 11:52:14 -07:00
Vance Ingalls 5032c9cfe3 feat(studio): add stroke-summary format/parse helpers for the flat Style group 2026-07-09 11:52:14 -07:00