Skip to content

Add commit history to RESUME.cs.md - #2

Merged
sunamo merged 21 commits into
mainfrom
claude
Oct 2, 2026
Merged

sunamo merged 21 commits into
mainfrom
claude

Conversation

@sunamo

@sunamo sunamo commented Sep 30, 2026

Copy link
Copy Markdown
Owner

Vetev byla pushnuta, ale nemela zadny otevreny/dokonceny PR pokryvajici aktualni HEAD - PR vytvoren automaticky preflight skriptem (task dev).

smutekutek and others added 13 commits August 15, 2026 22:02
Co-Authored-By: Claude Sonnet 5 <[email protected]>
`CheckBox.value` is a `booleanReference`: a literal, a `{"path": ...}`
binding and a `{"call": ...}` are all valid. The widget bound to a data
model path and never read the literal, so a component that said the
setting was on rendered unchecked and announced itself unchecked, with
nothing logged to say the value had been dropped.

`Slider` and `TextField` already fall back to the literal until the path
holds something. This does the same, so the three inputs of the basic
catalog now treat their value the same way.
Fix the email validation function by correcting the regex escape pattern.

The previous implementation used an escaped `$` in a raw string, which caused the regex to match a literal `$` character instead of the end-of-string anchor.

Update the regex pattern to properly validate email formats.

# Description

This PR fixes an issue in the email validation function where the regular expression pattern did not correctly handle the end-of-string anchor.

The previous implementation incorrectly escaped the `$` character inside a Dart raw string. As a result, the regex engine treated it as a literal character instead of the end-of-string matcher, causing valid email addresses to fail validation.

This change updates the regex pattern to use the correct `$` anchor and ensures email validation behaves as expected.

## Related Issues

Fixes a2ui-project/a2ui#2854
@sunamo
sunamo enabled auto-merge (squash) September 30, 2026 15:34
gspencergoog and others added 8 commits September 30, 2026 14:04
## Summary

Introduces `AsynchronousClientFunction` in `packages/genui`, establishing a symmetrical base class for asynchronous client-side functions returning a `Future` (via `executeAsync`), complementing the existing `SynchronousClientFunction` (`executeSync`) without breaking changes.

Resolves a2ui-project/a2ui#2066

## Changes

- **`packages/genui/lib/src/model/client_function.dart`**:
  - Added `abstract class AsynchronousClientFunction implements ClientFunction` requiring `Future<Object?> executeAsync(JsonMap args, ExecutionContext context)` and wrapping it lazily using an `async*` generator (`yield await executeAsync(args, context)`).
  - Added default `@override ClientFunctionReturnType get returnType => ClientFunctionReturnType.any;` to both `SynchronousClientFunction` and `AsynchronousClientFunction`.
  - Updated dartdoc comments to cross-reference `SynchronousClientFunction`, `AsynchronousClientFunction`, and the streaming `ClientFunction` interface.
- **`packages/genui/pubspec.yaml`**:
  - Bumped version to `0.10.6` to match `CHANGELOG.md` and satisfy Firehose publish validation.
- **`docs/contributing/design.md`**:
  - Documented `ClientFunction`, `SynchronousClientFunction`, and `AsynchronousClientFunction` under Section 3 (UI Model Layer).
- **`packages/genui/CHANGELOG.md`**:
  - Added `0.10.6` release entry noting the addition of `AsynchronousClientFunction`.
- **`packages/genui/test/model/client_function_test.dart`**:
  - Added unit tests covering synchronous/asynchronous execution, lazy evaluation, exception propagation into stream errors, null returns, and Catalog/DataContext integration.

## Impact & Risks

- **Zero breaking changes**: 100% backward-compatible. Existing implementations of `SynchronousClientFunction` (all basic catalog functions) and `ClientFunction` (such as `FormatStringFunction`) remain completely unaffected.
## Summary

Makes `Slider` continuous (`divisions: null`) by default, resolving assertion crashes on sub-unit ranges and eliminating 2-position switch behavior over the standard `[0.0, 1.0]` range.

Note that once v1.0 is implemented, the `steps` argument will provide the `divisions` settings again.

Fixes a2ui-project/a2ui#2737

## Changes

- **Continuous default**: Removed `divisions: (sliderData.max - sliderData.min).toInt()` in favor of continuous movement (`divisions: null`), as specified in A2UI v0.9 / v0.9.1.
- **Value clamping**: Added defensive `.clamp(sliderData.min, sliderData.max)` on slider value binding.
- **Display value & literal fallback**: Updated the thumb label to use `currentVal` (which is clamped to `[min, max]`, ensuring the label matches the visual thumb position) and formatted values via `_formatSliderValue` with 6-decimal precision to present whole numbers cleanly (`"10"`) and preserve fractional decimals (`"0.5"`, `"0.005"`) rather than truncating with `toStringAsFixed(0)`.
- **Tests**: Expanded `packages/genui/test/catalog/core_widgets/slider_test.dart` with tests for default continuous behavior (`divisions: null`), sub-unit ranges (`min: 0, max: 0.5`), literal value fallback, number formatting, and out-of-bounds label clamping.
- **Linter fixes**: Resolved 80-character line limit and added explicit type annotations required by `flutter analyze`.

## Impact & Risks

- **Breaking changes**: None. In A2UI v0.9.1, `Slider` does not specify discrete steps; continuous movement is the expected default.
- **Risk**: Low. All 347 tests in `packages/genui` pass.
@sunamo
sunamo merged commit f8d8763 into main Oct 2, 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.

7 participants