Skip to content

codelessly_api 6.2.0: motion, new triggers, gaps and wrapping lists, computed variables - #45

Merged
BuildCodelessly merged 11 commits into
masterfrom
claude/relaxed-noether-3wtt92
Oct 24, 2026
Merged

BuildCodelessly merged 11 commits into
masterfrom
claude/relaxed-noether-3wtt92

Conversation

@BuildCodelessly

@BuildCodelessly BuildCodelessly commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Model changes found while recreating a code-built app (Crate Digger, a vinyl collection with a turntable) in the Codelessly editor. Every gap the editor hit is logged with its fix in the editor repo's references/crate_digger/blockers.md.

What's new

  • Motion (BaseNode.motion, MotionModel):

    • offset, scale, opacity, rotation, 3D tilt with perspective and origin;
    • an animated transition and continuous spin;
    • loop, enter, enterFrom, delayMs and a bindable replayKey.

    Values bind as motion.<name> variables.

  • Triggers:

    • timer (intervalMs) and keyPress (key) on canvases;
    • swipes, doubleTap, hoverEnter and hoverExit on frames, rectangles, buttons, icons and text.

    Master's valueChanged and debounceMs are kept alongside.

  • Layout:

    • ListViewProperties.stacked and wrap with spacing and alignment;
    • sliders with orientation, inverted, a thumb stroke and a roundedRect thumb;
    • the row/column gap this branch first added as itemSpacing now uses master's spacing. RowColumnNode.fromJson reads itemSpacing in older JSON as spacing.
  • Variables:

    • computed variables use master's model: the value is a ${= ...} formula and isComputed reports it. A formula key in older JSON moves into value (withFormulaAsValue);
    • bindable effectsVisible, strokeWeight, cornerRadius, fontWeight and a slider's min/max.
  • JSON:

    • variableSyntaxIdentifierPattern matches a ${= ...} formula whole, object literals included;
    • EdgeInsetsModel.fromJson reads {left, top, right, bottom} and {horizontal, vertical};
    • lists and placeholders read JSON without their editor-only keys.
  • Release: version 6.2.0, with one CHANGELOG entry covering master's changes and this branch's.

Checks

Run locally the way CI runs them, on the merge with master:

  • generated code is up to date;
  • dart format;
  • dart analyze --fatal-infos;
  • dart test: 323 pass;
  • dart pub publish --dry-run: 0 warnings.

Merge order

  1. Merge this PR, then publish codelessly_api 6.2.0 to pub.
  2. Merge the SDK PR (codelessly_sdk 8.3.0: motion, formulas, computed variables, triggers, layout CodelesslySDK#80). Its CI resolves codelessly_api ^6.2.0 from pub, so it can only go green after step 1.
  3. Merge the editor PR (Codelessly/CodelesslyEditor#706) after pointing its submodules at the merged commits.

🤖 Generated with Claude Code

https://claude.ai/code/session_013oMokUGNW6txknJs7xxTik

- MotionModel on every node (BaseNode.motion): offset, scale, opacity,
  fractional rotation, 3D tilt with perspective, origin, an animated
  transition and a continuous spin. Values bind to formulas through
  variables['motion.<name>'].
- Triggers: timer (intervalMs) and keyPress (key) on canvases, and
  swipeLeft/Right/Up/Down on frames and rectangles.
- ListViewProperties.stacked draws data list items on top of each other.
- Lists parse from JSON without allowedTypes, deniedTypes, isScrollable
  or useFlutterListView.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013oMokUGNW6txknJs7xxTik
- ListViewProperties.wrap with spacing, run spacing and alignment.
- effectsVisible, strokeWeight, cornerRadius and fontWeight are property
  variables Set value actions can change.
- EdgeInsetsModel reads {left, top, right, bottom} and {horizontal, vertical}.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013oMokUGNW6txknJs7xxTik
- VariableData.formula: a variable worked out from others.
- MotionModel.loop (restart / reverse), enter and delayMs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013oMokUGNW6txknJs7xxTik
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013oMokUGNW6txknJs7xxTik
…th bindable range

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013oMokUGNW6txknJs7xxTik
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013oMokUGNW6txknJs7xxTik
…formulas with braces in variable syntax

- MotionModel.enterFrom and a bindable replayKey.
- SliderProperties.thumbShape (circle, roundedRect) with size and corners.
- variableSyntaxIdentifierPattern matches a ${= ...} formula whole, object
  literals included.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013oMokUGNW6txknJs7xxTik
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013oMokUGNW6txknJs7xxTik
Master's row/column spacing replaces itemSpacing (JSON itemSpacing is read
as spacing). Computed variables keep their ${= ...} formula in the value,
as master stores them; a separate formula field in JSON is read into it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013oMokUGNW6txknJs7xxTik
…elog

- Hover enter/exit become master's cursorEnter/cursorExit; trigger JSON
  naming hoverEnter or hoverExit reads as them (TriggerType.aliases).
- Placeholder type lists take master's per-node defaults (a list denies
  nested lists) instead of an empty default.
- This branch's changes go under master's Unreleased changelog section,
  for one release with master's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013oMokUGNW6txknJs7xxTik
@BuildCodelessly
BuildCodelessly merged commit b906edf into master Oct 24, 2026
2 checks passed
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.

2 participants