Skip to content

tweak(ui): update action buttons design, interactions and stacking - #5294

Open
ux-git wants to merge 4 commits into
sws2apps:mainfrom
ux-git:button-style-gradient
Open

tweak(ui): update action buttons design, interactions and stacking#5294
ux-git wants to merge 4 commits into
sws2apps:mainfrom
ux-git:button-style-gradient

Conversation

@ux-git

@ux-git ux-git commented Jul 15, 2026

Copy link
Copy Markdown
Member

Description

Refreshes the shared action buttons and unifies how dialog/popup action buttons are laid out across the app.

Buttons

  • Redesigns the main button as a gradient fill (a brighter top easing down to --accent-main) with a white top-lit border, driven by a new theme-aware --accent-gradient-top token — an exact value for the default theme and an adaptive fallback for the others. Colored main buttons derive their own brighter top.
  • Hover keeps the rest colors and fades in a theme-aware darken overlay (--btn-hover-overlay, near-black in light themes, a softer dark-grey in dark themes); press adds a subtle scale-in. Colored main buttons keep their exact color on click (no dim).
  • Adds the same press animation to the secondary and outline (tertiary) variants.

Dialog action buttons

  • Adds a shared DialogActions component that standardizes the footer layout: on desktop the buttons form a single spaced row (secondary on the left, main on the right) with a stable minimum width; on mobile they stack full-width with the main button on top.
  • Migrates ~60 dialogs and popups (confirmations, deletions, exports, setup wizards, the welcome and what's-new popups, etc.) to the shared component.

Fixes # (issue)

Type of change

  • New feature (non-breaking change which adds functionality)

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • My changes generate no new warnings

@vercel

vercel Bot commented Jul 15, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
staging-organized-app Ready Ready Preview Jul 21, 2026 12:07pm
test-organized-app Ready Ready Preview Jul 21, 2026 12:07pm

@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 6a8e3064-7892-4f22-bb79-2e8960156066

📥 Commits

Reviewing files that changed from the base of the PR and between 71f4121 and daa4544.

📒 Files selected for processing (1)
  • src/components/button/index.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/components/button/index.tsx

Walkthrough

The changes add a responsive DialogActions component, migrate numerous dialog and modal footers to it with consistent secondary-before-primary ordering, enhance gradient button state styling, and add gradient-related CSS custom properties.

Changes

UI standardization

Layer / File(s) Summary
Gradient button styling
src/components/button/index.tsx, src/global/index.css
Gradient buttons now use centralized border calculation, conditional overlays, press scaling, and updated hover, active, and disabled behavior backed by new CSS variables.
Responsive DialogActions component
src/components/dialog_actions/*
A typed responsive action container supports tablet row layouts, mobile column-reverse layouts, spacing, child sizing, and sx overrides.
DialogActions adoption
src/features/**/index.tsx
Dialog and modal footers replace local Box or Stack layouts with DialogActions, generally placing secondary actions before primary actions while preserving existing handlers and loading states.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Suggested reviewers: rhahao

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately summarizes the shared action-button UI updates.
Description check ✅ Passed The description clearly matches the changes: button styling updates and a new shared DialogActions layout.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/features/congregation/settings/language_groups/group_add/group_members/index.tsx (1)

32-38: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add disabled state to primary buttons during processing.

Although the click handlers in these files guard against concurrent executions with an early return, the primary buttons lack the disabled property. This means they remain visually active and interactive while isProcessing is true. For consistent UX and to match the behavior implemented in other dialogs (like ScheduleDelete), pass disabled={isProcessing} alongside the loading icon.

  • src/features/congregation/settings/language_groups/group_add/group_members/index.tsx#L32-L38: Add disabled={isProcessing} to the tr_createGroup button.
  • src/features/congregation/settings/language_groups/group_info/index.tsx#L72-L78: Add disabled={isProcessing} to the tr_save button.
  • src/features/contact/index.tsx#L88-L94: Add disabled={isProcessing} to the tr_sendFeedback button.
  • src/features/meetings/midweek_export/index.tsx#L111-L117: Add disabled={isProcessing} to the tr_export button.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/features/congregation/settings/language_groups/group_add/group_members/index.tsx`
around lines 32 - 38, Disable each primary processing button while its operation
is active by adding disabled={isProcessing} alongside the loading icon: update
the tr_createGroup button in
src/features/congregation/settings/language_groups/group_add/group_members/index.tsx
lines 32-38, the tr_save button in
src/features/congregation/settings/language_groups/group_info/index.tsx lines
72-78, the tr_sendFeedback button in src/features/contact/index.tsx lines 88-94,
and the tr_export button in src/features/meetings/midweek_export/index.tsx lines
111-117.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/components/button/index.tsx`:
- Around line 264-267: Update the base borderRadius logic in the button variant
styling to treat the group variant like the hover and active states, returning
'none' for group buttons while preserving the existing small and semi-white
radius behavior.

---

Nitpick comments:
In
`@src/features/congregation/settings/language_groups/group_add/group_members/index.tsx`:
- Around line 32-38: Disable each primary processing button while its operation
is active by adding disabled={isProcessing} alongside the loading icon: update
the tr_createGroup button in
src/features/congregation/settings/language_groups/group_add/group_members/index.tsx
lines 32-38, the tr_save button in
src/features/congregation/settings/language_groups/group_info/index.tsx lines
72-78, the tr_sendFeedback button in src/features/contact/index.tsx lines 88-94,
and the tr_export button in src/features/meetings/midweek_export/index.tsx lines
111-117.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: f7635922-29d9-4bbb-baa0-de9bbf5a88c1

📥 Commits

Reviewing files that changed from the base of the PR and between 3cff27b and 71f4121.

📒 Files selected for processing (67)
  • src/components/button/index.tsx
  • src/components/dialog_actions/index.tsx
  • src/components/dialog_actions/index.types.ts
  • src/features/app_start/vip/terms_use/index.tsx
  • src/features/congregation/app_access/join_requests/accept/index.tsx
  • src/features/congregation/app_access/user_add/person_select/index.tsx
  • src/features/congregation/app_access/user_details/delete_user/index.tsx
  • src/features/congregation/app_access/user_details/invitation_code/delete_code/index.tsx
  • src/features/congregation/field_service_groups/create_group/group_details/index.tsx
  • src/features/congregation/field_service_groups/create_group/new_group_members/index.tsx
  • src/features/congregation/field_service_groups/group_delete/index.tsx
  • src/features/congregation/field_service_groups/group_edit/index.tsx
  • src/features/congregation/field_service_groups/group_item/remove_person/index.tsx
  • src/features/congregation/field_service_groups/groups_reorder/index.tsx
  • src/features/congregation/settings/congregation_privacy/access_code_change/index.tsx
  • src/features/congregation/settings/congregation_privacy/delete_congregation/index.tsx
  • src/features/congregation/settings/congregation_privacy/master_key_change/index.tsx
  • src/features/congregation/settings/import_export/confirm_import/index.tsx
  • src/features/congregation/settings/import_export/export/index.tsx
  • src/features/congregation/settings/language_groups/group_add/group_details/index.tsx
  • src/features/congregation/settings/language_groups/group_add/group_members/index.tsx
  • src/features/congregation/settings/language_groups/group_delete/index.tsx
  • src/features/congregation/settings/language_groups/group_info/index.tsx
  • src/features/contact/index.tsx
  • src/features/dashboard/initial_setup/basic_settings/index.tsx
  • src/features/dashboard/initial_setup/person_record/index.tsx
  • src/features/demo/notice/index.tsx
  • src/features/meetings/assignments_delete/index.tsx
  • src/features/meetings/assignments_week_delete/index.tsx
  • src/features/meetings/midweek_export/index.tsx
  • src/features/meetings/monthly_view/add_custom_modal_window/index.tsx
  • src/features/meetings/outgoing_talks/schedule_delete/index.tsx
  • src/features/meetings/schedule_autofill/index.tsx
  • src/features/meetings/schedule_publish/index.tsx
  • src/features/meetings/weekend_editor/song_selector/index.tsx
  • src/features/meetings/weekend_export/index.tsx
  • src/features/ministry/report/form_S4/bible_studies/editor/index.tsx
  • src/features/ministry/report/form_S4/submit_report/index.tsx
  • src/features/ministry/report/form_S4/withdraw_report/index.tsx
  • src/features/ministry/report/ministry_timer/add_time_dialog/index.tsx
  • src/features/ministry/report/report_form_dialog/bible_study/index.tsx
  • src/features/ministry/report/report_form_dialog/service_time/index.tsx
  • src/features/my_profile/logout_confirm/index.tsx
  • src/features/my_profile/security/delete_account/index.tsx
  • src/features/my_profile/security/mfaDisable/index.tsx
  • src/features/my_profile/security/mfaEnable/index.tsx
  • src/features/persons/disqualify/index.tsx
  • src/features/persons/import_export/confirm_import/index.tsx
  • src/features/persons/import_export/export/index.tsx
  • src/features/persons/list/person_delete/index.tsx
  • src/features/persons/qualify/index.tsx
  • src/features/persons/speakers_catalog/my_congregation/congregations_access/index.tsx
  • src/features/persons/speakers_catalog/my_congregation/visibility_toggle/visibility_off/index.tsx
  • src/features/persons/speakers_catalog/other_congregations/congregation_add/details/index.tsx
  • src/features/persons/speakers_catalog/other_congregations/congregation_add/index.tsx
  • src/features/persons/speakers_catalog/speaker_details/talks_songs/index.tsx
  • src/features/quick_settings/index.tsx
  • src/features/reports/branch_office/submit_report/index.tsx
  • src/features/reports/branch_office/withdraw_report/index.tsx
  • src/features/reports/publisher_records/export_S21/all_records/index.tsx
  • src/features/reports/publisher_records/export_S21/specific_records/active_publishers/index.tsx
  • src/features/reports/publisher_records/export_S21/specific_records/field_service_groups/index.tsx
  • src/features/reports/publisher_records/export_S21/specific_records/inactive_publishers/index.tsx
  • src/features/reports/publisher_records_details/report_details/index.tsx
  • src/features/theme_switcher/themeChangeConfirm/index.tsx
  • src/features/whats_new/buttons_action/index.tsx
  • src/global/index.css

Comment on lines 264 to 267
borderRadius:
variant === 'small' || variant === 'semi-white'
? 'var(--radius-m)'
: 'var(--radius-l)',

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Fix inconsistent border radius for group buttons.

The base borderRadius does not handle the group variant, unlike the :hover and :active states which explicitly set it to 'none'. This omission will cause group buttons to appear rounded in their default state and abruptly snap to square corners when hovered or pressed.

💚 Proposed fix to align the base border radius
         borderRadius:
-          variant === 'small' || variant === 'semi-white'
-            ? 'var(--radius-m)'
-            : 'var(--radius-l)',
+          variant === 'group'
+            ? 'none'
+            : variant === 'small' || variant === 'semi-white'
+              ? 'var(--radius-m)'
+              : 'var(--radius-l)',
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
borderRadius:
variant === 'small' || variant === 'semi-white'
? 'var(--radius-m)'
: 'var(--radius-l)',
borderRadius:
variant === 'group'
? 'none'
: variant === 'small' || variant === 'semi-white'
? 'var(--radius-m)'
: 'var(--radius-l)',
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/button/index.tsx` around lines 264 - 267, Update the base
borderRadius logic in the button variant styling to treat the group variant like
the hover and active states, returning 'none' for group buttons while preserving
the existing small and semi-white radius behavior.

@sonarqubecloud

Copy link
Copy Markdown

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