feat(client): add user-settable Tab order property to focusable widgets#41894
feat(client): add user-settable Tab order property to focusable widgets#41894sebastianiv21 wants to merge 1 commit into
Conversation
Adds an optional "Tab order" property (integer >= 1) to the General section of all focusable widgets so builders can control keyboard Tab navigation order in fixed-layout apps. The value flows to a data-taborder attribute on the positioned widget wrapper, and the Tab handler now follows HTML tabindex semantics per candidate set: widgets with an explicit order come first (ascending, ties broken by position), followed by the rest in the existing position-based order. When no widget on a canvas has a value set, the original position-based code path runs unchanged, so existing apps behave exactly as before with no DSL migration needed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
/build-deploy-preview skip-tests=true |
|
Deploying Your Preview: https://github.com/appsmithorg/appsmith/actions/runs/27435145447. |
|
🔴🔴🔴 Cyclic Dependency Check: This PR has increased the number of cyclic dependencies by 1, when compared with the release branch. Refer this document to identify the cyclic dependencies introduced by this PR. You can view the dependency diff in the run log. Look for the check-cyclic-dependencies job in the run. |
|
Deploy-Preview-URL: https://ce-41894.dp.appsmith.com |
Description
Adds an optional Tab order property (integer ≥ 1) to the General section of all focusable widgets, letting builders control keyboard Tab navigation order in fixed-layout apps (editor canvas and deployed view).
How it works
data-taborderattribute on the.positioned-widgetwrapper (PositionedComponentLayer→PositionedContainer).useWidgetFocus/tabbable.ts) now applies HTMLtabindexsemantics per candidate set: widgets with an explicit order come first (ascending, ties broken by position), followed by widgets without one in the existing position-based order.data-taborder". When no widget has a value (i.e., every existing app), the originalsortWidgetsByPositioncode path runs unchanged — no DSL migration needed. Invalid values (0, negatives, non-integers, bad bindings) are treated as unset.Scope
src/widgets/sharedPropertyPaneConfig.ts) appended to the General section of 24 files covering 26 widgets (BaseInputWidgetcovers Input/Currency/Phone via inheritance).Testing
tabbable.test.tsstub with 11 tests: legacy-regression gate (output identical to position sorting when no orders set), explicit ordering, HTML-style interleaving, shift-Tab reverse, ties, invalid values, entry ordering (canvas/modal), and per-canvas scoping. All pass.Fixes #
Issue NumberAutomation
/ok-to-test tags="@tag.All"
🔍 Cypress test results
Tip
🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
Workflow run: https://github.com/appsmithorg/appsmith/actions/runs/27435141159
Commit: fce0bd2
Cypress dashboard.
Tags:
@tag.AllSpec:
Fri, 12 Jun 2026 19:34:09 UTC
Communication
Should the DevRel and Marketing teams inform users about this change?
🤖 Generated with Claude Code