Skip to content

chore(release): naked_ui 1.3.0 - #354

Merged
leoafarias merged 4 commits into
mainfrom
release/naked-ui-1.3.0
Oct 30, 2026
Merged

leoafarias merged 4 commits into
mainfrom
release/naked-ui-1.3.0

Conversation

@leoafarias

@leoafarias leoafarias commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Releases naked_ui 1.3.0 from the consolidated release stack based on main. The new caller-owned menu trigger, overlay constraint, and slider track APIs require a minor release.

Included changes

  • Focus and semantics: preserve focus actions on labelled disclosures; support caller-owned menu triggers; keep nested menus out of menubar traversal; return popover focus to the caller's control without an extra tab stop. Correct the inherited RemixPopover documentation: it supplies expanded/collapsed semantics with openOnTap: false.
  • Overlays and scroll: constrain menu/select panels to the available height beside their trigger; reveal keyboard targets in overlays, tabs, toggle groups, and menubars without scrolling unrelated ancestors or moving targets already in view.
  • Select and combobox: open selects on the selected or first focusable option, preserve focus requested by panel content, ignore stationary pointers while lists scroll, and reveal highlighted combobox options while keeping field focus and respecting manual scrolling.
  • Slider geometry and lifecycle: add NakedSliderTrack so input follows an inset painted rail; reconcile thumb/configuration changes and disabled state, retain surviving focus nodes, preserve interaction callback pairs and requested values, and keep keyboard focus when semantics are excluded. Primitive geometry coverage includes horizontal, vertical, RTL, and inverted modes.
  • Reduced motion: dialogs, tooltips, disclosures, and toasts honor both MediaQuery.disableAnimations and the platform Reduce Motion setting; preserve modal barrier semantics when transitions are skipped.
  • Web tests: put the global Flutter test configuration under test/, mark the process-based integration harness VM-only, handle browser-specific radio keyboard behavior and semantics timing, and compare slider callback events numerically across Dart backends.

Release files

  • packages/naked_ui/pubspec.yaml: 1.2.3 → 1.3.0.
  • packages/naked_ui/CHANGELOG.md: combined 1.3.0 features and fixes.
  • registry_source/tool/fortal_parity/check.dart: tested workspace resolution pinned to 1.3.0.

Where to look

  • 979 changed library lines across 17 files under packages/naked_ui/lib/src/: start with naked_menu.dart, naked_select.dart, naked_combobox.dart, naked_slider.dart, and naked_popover.dart.
  • Shared behavior lives in base/overlay_base.dart and utilities/{anchored_overlay,positioning,focus_in_view,reduced_motion}.dart.
  • 4,755 changed test lines across 22 files under packages/naked_ui/test/: start with slider geometry/lifecycle tests, menu/select/combobox tests, utilities/focus_in_view_test.dart, and semantics tests.

Validation

Pinned Flutter 3.44.0 / Dart 3.12.0. The four Chrome portability failures are fixed: callback events now compare ordered (String, double) records. The assertions still require exactly one start, change, and end callback in that order, with exact values 20, 40, 40, for both axes and both controlled modes.

Slider lifecycle test file Before the fix After the fix
Chrome 18 passed, 4 failed 22 passed
VM 22 passed 22 passed

Commands run before and after from packages/naked_ui:

fvm flutter test --platform=chrome --reporter=expanded test/src/naked_slider_lifecycle_test.dart
fvm flutter test --reporter=expanded test/src/naked_slider_lifecycle_test.dart

Chrome uses the VM launcher flags --no-sandbox --disable-dev-shm-usage through CHROME_EXECUTABLE.

  • Analysis and format checks for the changed test file passed; git diff --check passed.
  • Full local release validation at the base release commit f1b3a97: 1,157 VM tests passed, 3 skipped, melos run ci:checks passed (including docs, Fortal parity, registry/dependency/toolchain contracts), and both full Vanilla/Fortal consumer checks passed, including independent dependency closures, catalog installs, fixture tests, and web builds.
  • All 15 current GitHub checks passed on head 943e755f0aacc4f1dc9bc87ffb6b9c27f4b3d29d, including both full preset consumer jobs. Documentation deployment is skipped for pull requests.

Tree equivalence

The final tree is #353 at 7da9909d3b31a14b12bb97e619a8b47a36057956 plus the expanded/collapsed-semantics correction in docs/components/popover.mdx and the slider lifecycle test portability fix. git diff against #353 is limited to those two files. The fix commit above f1b3a97 changes only five lines in packages/naked_ui/test/src/naked_slider_lifecycle_test.dart; library code is identical to #353. An independently constructed expected tree matches the current tree: 5758f028d0c3cb194ca560c2c73271af97594673.

Replaces

#317, #322, #330, #335, #347, #344, #349, #350, #334, #338, and #353. These PRs remain open for Leo to decide their disposition.

Remix adapter changes are handled separately in #352; its slider behavior is horizontal LTR/RTL. Vertical and inverted modes belong to NakedSlider.


Open workspace in Conductor

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-30T00:32:09.681252Z f1b3a97 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f1b3a97c64

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

void _handleTriggerHover(PointerHoverEvent event) {
if (!widget.enabled || event.delta == Offset.zero) return;
AnchoredOverlay.clearItemFocus(context);
_scheduleHoverOpen();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the pending submenu-open timer during pointer movement

When the pointer continues moving within a submenu trigger, every hover event calls _scheduleHoverOpen(), which cancels the existing timer and starts another full hoverDelay. Consequently, the submenu never opens while the pointer keeps moving, even after it has remained over the row longer than the configured delay; previously the timer started once on entry. Start the timer on the first qualifying movement without restarting an already-pending open timer, while retaining cancellation when the pointer leaves.

Useful? React with 👍 / 👎.

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