Skip to content

Signature node, hold trigger, full-screen dialogs, more bindable properties - #44

Open
BuildCodelessly wants to merge 11 commits into
masterfrom
claude/busy-lovelace-m5cijt
Open

BuildCodelessly wants to merge 11 commits into
masterfrom
claude/busy-lovelace-m5cijt

Conversation

@BuildCodelessly

@BuildCodelessly BuildCodelessly commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

API changes found while rebuilding a jobsite daily log app in the editor. Each one fixed something the editor couldn't express. This branch is merged with master; master's row/column spacing and wrap (#40) and dialog presentation and alignment (#41) replace this branch's versions.

  • SignatureNode (signature): a box to sign in. Its value is a list of strokes; inkColor, strokeWidth and readOnly are in SignatureProperties.
  • TriggerType.hold with TriggerModel.duration (1200 ms by default) for hold-to-confirm. Frames, rectangles, rows and columns offer it. Rows and columns also declare the click and long-press triggers they already ran.
  • DialogPresentation.fullScreen: a show dialog action can cover the whole screen.
  • Bindable properties: strokeWeight, flex on every node, and IconNode's iconColor and iconName.
  • Fixes:
    • A navigate-back action parses without destinationId.
    • SpacerNode JSON no longer requires its base fields.
    • Both are covered by test/minimal_node_types_json_test.dart.

Everything is under ## Unreleased in CHANGELOG.md. Version bumps are left to the release commit.

Checks run locally on the head commit, the same steps as CI:

  • build_runner: no .g.dart diff.
  • dart format, and dart analyze --fatal-infos with no issues.
  • dart test: 344 tests passing.
  • dart pub publish --dry-run: 0 warnings.

The merge also formats master's test/row_column_wrap_test.dart and commits its regenerated expansion_tile_node.g.dart, which master's own CI flags.

Merge order

  1. This PR, then the codelessly_api release.
  2. Render signatures, hold-to-confirm, full-screen dialogs, bound flex and record helpers CodelesslySDK#79. Its CI needs that release on pub.dev.
  3. Codelessly/CodelesslyEditor#705, with its submodule pins moved to the merged commits.

🤖 Generated with Claude Code

https://claude.ai/code/session_0147gqWiq3xoEdAGwWSpq9JK

Its constructor didn't take positioningMode, aspectRatioLock or
reactions, so the generated fromJson cast them as required and a
spacer written without them (as other nodes allow) failed to parse.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0147gqWiq3xoEdAGwWSpq9JK
IconNode lists iconColor (already read by the runtime) and iconName
among its property variables, so the editor can bind them and
conditions and actions can set them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0147gqWiq3xoEdAGwWSpq9JK
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0147gqWiq3xoEdAGwWSpq9JK
DialogPresentation picks a dialog, a bottom sheet, a sheet on mobile
and a dialog elsewhere, or a full-screen page. Older actions read as
dialogs and leave the field out of their JSON.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0147gqWiq3xoEdAGwWSpq9JK
SignatureNode stores strokes as normalized [x, y] points so a signature
replays at any size. TriggerType.hold fires after its duration; rows and
columns now declare the triggers they run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0147gqWiq3xoEdAGwWSpq9JK
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0147gqWiq3xoEdAGwWSpq9JK
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0147gqWiq3xoEdAGwWSpq9JK
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0147gqWiq3xoEdAGwWSpq9JK
CI regenerates *.g.dart and fails on a diff: the generator writes
RowColumnNode's reactions first. dialog_presentation_test.dart wasn't
formatted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0147gqWiq3xoEdAGwWSpq9JK
Master landed RowColumnNode spacing, wrap and runSpacing in
RowColumnMixin, the same JSON fields this branch added on the node. Keep
master's, so a row's spacing applies whether or not it wraps; this
branch keeps only the click, long-press and hold triggers rows offer.
Regenerated JSON code and formatted master's wrap test for CI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0147gqWiq3xoEdAGwWSpq9JK
Master landed ShowDialogAction.presentation (dialog, bottom sheet,
adaptive) with an alignment for where a dialog opens. Keep master's
action and add the full screen presentation this branch had. Both
branches added test/minimal_node_json_test.dart; this branch's moves to
test/minimal_node_types_json_test.dart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0147gqWiq3xoEdAGwWSpq9JK
@BuildCodelessly BuildCodelessly changed the title Signature node, hold trigger, row/column wrap, dialog presentation, more bindable properties Signature node, hold trigger, full-screen dialogs, more bindable properties Oct 24, 2026
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