Skip to content

fix: PropertyPanel の justifyContent/alignItems 等 flex プロパティが反映されない + テスト追加#54

Merged
Pregum merged 1 commit intomainfrom
fix/layout-recompute-on-edit
Apr 23, 2026
Merged

fix: PropertyPanel の justifyContent/alignItems 等 flex プロパティが反映されない + テスト追加#54
Pregum merged 1 commit intomainfrom
fix/layout-recompute-on-edit

Conversation

@Pregum
Copy link
Copy Markdown
Owner

@Pregum Pregum commented Apr 23, 2026

症状

PropertyPanel の Auto Layout セクションから justifyContent / alignItems / gap / padding / layout を変更しても canvas に反映されない。opacity / fill / rotation など単一ノードのプロパティは動作するのに、レイアウト関係だけ効かない。

原因

CanvasContentstate.doc(ドキュメント読み込み時に layoutDocument で計算済みのもの)を描画に使っていた。編集時 state.doc / state.rawDoc は直接書き換えられるが、flex レイアウトは再計算されていなかった。

そのため fill / opacity / rotation のように ノード自身のプロパティで決まるもの は反映されるが、justifyContent のような 子の配置を決めるプロパティ は効かなかった。

修正

CanvasContentstate.rawDoc から毎レンダリングで

resolveRefs → substituteVariables → layoutDocument

を再計算する形に変更。state.rawDoc は editor が直接更新しているので flex プロパティ変更も即時反映される。

追加テスト(依頼された「最近実装した所から」)

  • tests/booleanOps.test.ts: nodeToPolygon / polygonToPathD / booleanOperation 4 op + エッジケース (13 件)
  • tests/flatten.test.ts: flattenToPath / outlineStroke align 別 + エッジ (9 件)
  • tests/maskedChildren.test.ts: splitByMasks のセグメント分割 (6 件)
    • MaskedChildren から splitByMasks を export
  • 合計 138 → 144 tests (+28 in this session)

Test plan

  • Frame を選択 → Auto Layout セクションで layout='horizontal' に
  • gap / padding / justifyContent / alignItems を変えると canvas が即時更新
  • Undo で戻る
  • 既存の fill / opacity / rotation に回帰なし
  • 144 テスト pass
    🤖 Generated with Claude Code

## 症状
PropertyPanel の Auto Layout セクションから justifyContent / alignItems /
gap / padding / layout を変更しても canvas に反映されない。opacity など
レイアウト非依存のプロパティは動作するのに、レイアウト関係だけ効かない。

## 原因
CanvasContent は state.doc (ドキュメント読み込み時に layoutDocument で
計算済みのもの) を描画に使っていた。編集時 state.doc / state.rawDoc は
直接書き換えられるが、flex レイアウトは再計算されていなかった。そのため
fill / opacity / rotation のように ノード自身のプロパティで決まるものは
反映されるが、justifyContent のような子の配置を決めるプロパティは
効かなかった。

## 修正
CanvasContent を state.rawDoc から毎レンダリングで
  resolveRefs → substituteVariables → layoutDocument
を再計算する形に変更。state.rawDoc は editor が直接更新しているので
flex プロパティ変更も即時反映される。

## 追加テスト (依頼の最近実装分)
- tests/booleanOps.test.ts: nodeToPolygon / polygonToPathD /
  booleanOperation 4 op + エッジケース (13 件)
- tests/flatten.test.ts: flattenToPath / outlineStroke align 別 + エッジ (9 件)
- tests/maskedChildren.test.ts: splitByMasks のセグメント分割 (6 件)
  - MaskedChildren から splitByMasks を export
- 合計 138 → 144 tests (+28 from このセッション)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Pregum Pregum merged commit 0fd44fc into main Apr 23, 2026
1 check passed
@Pregum Pregum deleted the fix/layout-recompute-on-edit branch April 23, 2026 04:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant