Skip to content

RigCheck: signature node, loop animations, sheet dialogs, wrap, scaled frames and more - #46

Merged
BuildCodelessly merged 14 commits into
masterfrom
claude/tender-johnson-1xpj1j
Oct 24, 2026
Merged

BuildCodelessly merged 14 commits into
masterfrom
claude/tender-johnson-1xpj1j

Conversation

@BuildCodelessly

@BuildCodelessly BuildCodelessly commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

This PR adds the model fields the RigCheck fleet-inspection rebuild in CodelesslyEditor needed. Each one filled a gap that blocked recreating a code-built app in the editor. New fields are left out of the JSON at their defaults, so saved projects don't change. Everything is listed under Unreleased in CHANGELOG.md.

Up to date with master (6.2.0). Where 6.2.0 already shipped the same feature, master's API stays and this branch's duplicate was removed:

  • repeating gradients use gradientRepeatEvery; tileMode / gradientExtent were dropped;
  • wrap uses RowColumnNode.wrap, spacing and runSpacing;
  • dialogs use master's DialogPresentation and alignment.

New

  • SignatureNode (signature), a draw-to-sign pad. Its strokes are a bindable value, and error / enabled can be bound.
  • BaseNode.loopAnimation: pulse, fade, scale or spin, with a bindable loopAnimationEnabled.
  • cursorEnter and cursorExit triggers on clickable nodes.
  • DialogPresentation.sideSheet, and on ShowDialogAction and ConfirmAction the sheet settings sheetWidth, maxHeightFactor and showDragHandle.
    • The defaults are no drag handle and no height cap, so bottom sheets saved with 6.2.0 look the same.
    • ConfirmAction also gets presentation.
  • ShowToastAction: accentColor, accentWidth, iconColor, fontFamily and cornerRadius.
  • FrameNode.contentFit and contentAlignment: scale the content to fit, like FittedBox.
  • GridDelegateProperties.shrinkWrapRows: each row is as tall as its tallest item.
  • TextFieldNode binds errorText and error.

Fixes

  • SpacerNode.fromJson and GridViewNode.fromJson default the fields every other node defaults.

Tests: every CI step passes locally:

  • generated code up to date
  • dart format (0 changed)
  • dart analyze --fatal-infos (no issues)
  • dart test (336 passed)
  • dart pub publish --dry-run (0 warnings)

Merge order

  1. This PR. Release it as codelessly_api 6.3.0.
  2. RigCheck: runtime for signatures, animations, sheets, wrap, scaled frames, record formulas and fixes CodelesslySDK#81. It needs this release.
  3. Codelessly/CodelesslyEditor#711. It needs both releases.

Known Issues

  • The version bump and release commit are left to the release step, as in earlier releases.

🤖 Generated with Claude Code

https://claude.ai/code/session_011WedhUVWdWR5swqZYMuGfP

claude added 12 commits October 23, 2026 16:46
A gradient paint can now repeat or mirror past its ends (tileMode, default
clamp and left out of the JSON) over a set length in pixels
(gradientExtent), so a short gradient with hard stops paints stripes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Its value is the list of strokes drawn (each a list of [x, y] points),
bindable through variables.value and settable with setValue; changed
fires when a stroke ends. Properties: ink color and width, background,
border (and error border), corner radius, placeholder text, color and
size, sign line, error and enabled (both bindable through variables).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
BaseNode gains an optional loopAnimation (LoopAnimation: pulse, fade,
scale or spin, with duration, delay, reverse, curve and from/to scale,
opacity or turns), serialized on every node type and left out when null.
Its `loopAnimationEnabled` field can be bound to a variable to turn it
on and off at runtime.

Nodes with a click trigger now offer cursorEnter and cursorExit, and the
trigger docs say what hover, cursorEnter and cursorExit mean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…aults test

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011WedhUVWdWR5swqZYMuGfP
ShowDialogAction gains presentation (dialog | bottomSheet | sideSheet,
default dialog), sheetWidth, maxHeightFactor (0.92) and showDragHandle
(true). Defaults are omitted from JSON, so saved actions are unchanged.
copyWith now keeps nonBlocking and enabled.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SpacerNode passed none of positioningMode, aspectRatioLock and reactions
to SceneNode, so json_serializable cast them as required and fromJson
refused a spacer without them. GridViewNode set isScrollable and
useFlutterListView in its body, so fromJson required both. They are now
constructor parameters with defaults; toJson still writes them because
older readers require them.

GridDelegateProperties.shrinkWrapRows makes each row as tall as its
tallest item; the grid then leaves its item's main axis to the item's fit.

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

- ConfirmAction: presentation (dialog | bottomSheet | sideSheet),
  sheetWidth, maxHeightFactor (0.92) and showDragHandle (true), as on
  ShowDialogAction.
- ShowToastAction: accentColor and accentWidth (4) for a bar down the
  left edge, iconColor, fontFamily and cornerRadius.
- RowColumnNode: wrap, wrapSpacing and wrapRunSpacing, to lay children
  out like Flutter's Wrap.
- FrameNode: contentFit (a Fit, null for none) and contentAlignment
  (center), to scale content laid out at the design size into the frame.
- TextFieldNode.propertyVariables lists errorText and error, so the
  editor offers them for binding.

Every new field is left out of the JSON at its default. Covered by
test/rigcheck_fields_test.dart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011WedhUVWdWR5swqZYMuGfP
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011WedhUVWdWR5swqZYMuGfP
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011WedhUVWdWR5swqZYMuGfP
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011WedhUVWdWR5swqZYMuGfP
Where master released the same feature, master's API stays and this
branch's duplicate goes: repeating gradients use gradientRepeatEvery
(tileMode/gradientExtent dropped), wrap uses RowColumnNode wrap, spacing
and runSpacing (wrapSpacing/wrapRunSpacing dropped), and dialogs use
master's DialogPresentation (dialog, bottomSheet, adaptive) and
alignment, with this branch's sideSheet, sheetWidth, maxHeightFactor and
showDragHandle added on top.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011WedhUVWdWR5swqZYMuGfP
Saved bottom sheets (released in 6.2.0) don't change when this branch adds
the options: showDragHandle defaults to false and maxHeightFactor to 1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011WedhUVWdWR5swqZYMuGfP
@BuildCodelessly
BuildCodelessly merged commit 562614b 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