Skip to content

feat(ui)!: redesign shared buttons and migrate app controls - #8859

Merged
dev-rb merged 94 commits into
mainfrom
rahul/feat-button-redesign
Oct 28, 2026
Merged

dev-rb merged 94 commits into
mainfrom
rahul/feat-button-redesign

Conversation

@dev-rb

@dev-rb dev-rb commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Why

Redesign the existing shared Button so actions use consistent materials, sizing, and explicit composition across desktop and touch layouts, without maintaining a parallel implementation.

How it works

The canonical @ui Button uses semantic materials generated by the existing theme renderer, including accent-aware foreground colors. ButtonGroup.Button explicitly opts into a shared frame; ordinary Buttons remain independent. Callers migrate directly to the new API rather than relying on compatibility translations.

What

  • Replace Button variants, sizing, tooltip configuration, loading treatment, and optional finishes. Preserve native disabled behavior and guard non-native activation.
  • Derive Button theme variables for app roots and theme previews without changing saved theme data.
  • Migrate app callers to explicit action variants, icon dimensions, accessible labels, and grouped controls, including header menus, sharing, filters, and navigation.
  • Align composer utilities and compact task/project property controls. Keep the shared New launcher neutral with variant="secondary" finish="raised".
  • Update Button gallery examples, affected fixtures, migration notes, and component guidance.

Breaking API changes: replace legacy label, square, depth, glass, noTouchResize, and root tooltip options with aria-label, icon-* sizes, optional finish, and the tooltip options object. Group inheritance requires ButtonGroup.Button.

Follow-ups

  • Complete visual, keyboard, touch, and type validation before merging. Verification and hooks remain paused at the user's request; this PR does not claim validated rendering or behavior.

dev-rb added 17 commits October 26, 2026 02:53
Why: These wrappers still referenced Button props removed by the canonical API migration.

What: Use accessible labels and structured tooltips, preserve split shortcut defaults, and update number-stepper callers and migration guidance.
Why: Direct hosted requests produced reported CORS failures during the preview.

What: Document the approved same-origin proxy launch while retaining HTTP and port 3007. Backend CORS policies remain unchanged.
Restore padding around task creation options and let the share header
button fill its group segment without an extra tooltip wrapper.

Use ghost secondary actions, accent submission actions, and compact
search-clear and split-close controls with explicit icon sizes.
Keep the separate Show and Hide navigation actions ghost-styled without
a persistent expanded-state fill.
Use accent styling for shared create, send, and confirmation controls,
plus main save, submit, invitation, approval, and import actions.

Keep the neutral Button default and utility controls separate. Preserve
danger and success treatments for confirmations with explicit tones.
Align document creation, collaborator saving, and onboarding continuation
with the main-action accent styling.
Keep the New launcher neutral while final submit actions retain accent
styling. Use the icon size recipe for Add tag instead of combining a
labeled control minimum height with a narrower width override.
Why:
Task composer and document/task metadata need filled neutral controls
instead of outline pills.

What:
Allow secondary property and tag pills and select them on these surfaces.
Remove document-level background and border overrides without resizing
controls or changing other property consumers.
Why:
Board pagination needs an outline action instead of a filled primary.

What:
Set column and board Load more buttons to the outline variant.
Keep pagination callbacks, loading behavior, and sizing unchanged.
Why:
Composer utility controls inherited the prominent default Button style,
and reply attachment and trash icons had no explicit dimensions.

What:
Use ghost styling for composer utilities and keep Send unchanged.
Size reply action icons directly without changing button hit areas.
Why:
Folder expand and close controls compete with the final creation action.

What:
Use ghost styling for both header utilities and preserve Create Folder.
Why:
Inline task and document properties need a more compact footprint.

What:
Use xs sizing for property pills, tags, and Add property controls.
Expose size on shared helpers while preserving defaults elsewhere.
Why:
Unspecified variants made utility controls inherit prominent primary
faces after the Button migration.

What:
Set utility actions to ghost and final submissions to accent.
Use outline for neutral launchers and pagination, and danger for member
removal. Preserve inherited group styles and caller-controlled wrappers.
Why:
ButtonGroup kept the legacy raised frame without an explicit finish.

What:
Keep the existing frame and layout, remove automatic elevation, and
document the flat default for grouped actions.
Why:
Project creation retained larger outlined controls after task composer styling changed.

What:
Use compact secondary draft and property controls, a matching sharing toggle, and a small accent create action. Preserve draft and submission behavior.
Why:
Project details and composer icons differed from the task presentation.

What:
Use compact secondary property pills and matching row typography.
Keep composer header icons at 16px without changing button targets or
project editing behavior.
Why:
The shared New launcher needs the raised finish while staying neutral.

What:
Apply the raised finish to the existing outline New button without
changing its sizing, placement, or actions.
@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 738 files, which is 438 over the limit of 300.

To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch.

Usage-priced reviews support at most 300 files.

Run configuration
Commits

Reviewing files that changed from the base of the PR and between 38b88f1 and 74e7d1c.

Files selected for processing: 738
  • .agents/rules/web/design-system.md
  • .agents/rules/web/ui-primitives.md
  • .agents/rules/web/ui.md
  • apps/web/AGENTS.md
  • apps/web/src/components/app/DesktopTitleBar.test.tsx
  • apps/web/src/components/app/DesktopTitleBar.tsx
  • apps/web/src/components/app/FatalError.tsx
  • apps/web/src/components/app/FileDownloadHeader.tsx
  • apps/web/src/components/app/HeaderActionButton.tsx
  • apps/web/src/components/app/HeaderActionGroup.tsx
  • apps/web/src/components/app/ResponsiveBlockToolbar.tsx
  • apps/web/src/components/app/app-sidebar/sidebar-search-menu.tsx
  • apps/web/src/components/app/mobile/ConfirmDrawer.tsx
  • apps/web/src/components/app/mobile/browser-test/fixture.tsx
  • apps/web/src/components/app/mobile/glassPress.test.ts
  • apps/web/src/components/app/mobile/glassPress.ts
  • apps/web/src/components/app/side-panel/SidePanel.tsx
  • apps/web/src/components/app/sidebar-next/create-button.tsx
  • apps/web/src/components/app/sidebar-next/customize-sidebar-modal.tsx
  • apps/web/src/components/app/sidebar-next/footer-actions.tsx
  • apps/web/src/components/app/sidebar-next/list-nav.tsx
  • apps/web/src/components/app/sidebar-next/more-menu.tsx
  • apps/web/src/components/app/sidebar-next/nav-glyph.tsx
  • apps/web/src/components/app/sidebar-next/return-to-call-button.tsx
  • apps/web/src/components/app/sidebar-next/search-bar-button.test.tsx
  • apps/web/src/components/app/sidebar-next/search-bar-button.tsx
  • apps/web/src/components/app/sidebar-next/update-button.tsx
  • apps/web/src/components/app/split-layout/SplitButtons.tsx
  • apps/web/src/components/app/split-layout/components/SplitDrawer.tsx
  • apps/web/src/components/app/split-layout/components/SplitFileMenu.tsx
  • apps/web/src/components/app/split-layout/components/SplitHeader.tsx
  • apps/web/src/components/app/split-layout/components/SplitPanel.tsx
  • apps/web/src/components/app/split-panel/SplitPanel.tsx
  • apps/web/src/components/app/tab-layout/DesktopTabStrip.tsx
  • apps/web/src/components/date-time-range/date-time-range-fields.tsx
  • apps/web/src/components/date-time-range/time-range-editor.tsx
  • apps/web/src/components/diff-view/DiffView.tsx
  • apps/web/src/components/diff-view/README.md
  • apps/web/src/components/diff-view/comments/CommentThread.tsx
  • apps/web/src/components/diff-view/debug/DiffViewGallery.tsx
  • apps/web/src/components/gantt/gantt-markers.tsx
  • apps/web/src/components/gantt/gantt-settings.tsx
  • apps/web/src/components/gantt/gantt-sidebar.tsx
  • apps/web/src/components/gantt/gantt-zoom-controls.tsx
  • apps/web/src/components/ui/components/ApiKeyInput.docs.tsx
  • apps/web/src/components/ui/components/Avatar.tsx
  • apps/web/src/components/ui/components/Badge.tsx
  • apps/web/src/components/ui/components/Button.docs.tsx
  • apps/web/src/components/ui/components/Button.test.tsx
  • apps/web/src/components/ui/components/Button.tsx
  • apps/web/src/components/ui/components/ButtonGroup.tsx
  • apps/web/src/components/ui/components/Calendar.tsx
  • apps/web/src/components/ui/components/CollapseTransition.docs.tsx
  • apps/web/src/components/ui/components/CollapsedInput.tsx
  • apps/web/src/components/ui/components/ConfirmDialog.test.tsx
  • apps/web/src/components/ui/components/ConfirmDialog.tsx
  • apps/web/src/components/ui/components/CopyButton.docs.tsx
  • apps/web/src/components/ui/components/CopyButton.test.tsx
  • apps/web/src/components/ui/components/CopyButton.tsx
  • apps/web/src/components/ui/components/DeleteDialog.tsx
  • apps/web/src/components/ui/components/Dropdown.tsx
  • apps/web/src/components/ui/components/EntityComposer.test.tsx
  • apps/web/src/components/ui/components/EntityComposer.tsx
  • apps/web/src/components/ui/components/FileTree.tsx
  • apps/web/src/components/ui/components/HoldButton.tsx
  • apps/web/src/components/ui/components/InputGroup.docs.tsx
  • apps/web/src/components/ui/components/InputGroup.tsx
  • apps/web/src/components/ui/components/InvertUtil.docs.tsx
  • apps/web/src/components/ui/components/Item.docs.tsx
  • apps/web/src/components/ui/components/NumberUnitInput.docs.tsx
  • apps/web/src/components/ui/components/NumberUnitInput.tsx
  • apps/web/src/components/ui/components/Panel.docs.tsx
  • apps/web/src/components/ui/components/PillButton.tsx
  • apps/web/src/components/ui/components/SendButton.tsx
  • apps/web/src/components/ui/components/TabSelector.tsx
  • apps/web/src/components/ui/components/Tabs.docs.tsx
  • apps/web/src/components/ui/components/Tabs.tsx
  • apps/web/src/components/ui/components/Toast.docs.tsx
  • apps/web/src/components/ui/components/Toolbar.docs.tsx
  • apps/web/src/components/ui/components/Tooltip.test.tsx
  • apps/web/src/components/ui/components/Tooltip.tsx
  • apps/web/src/components/ui/components/Tour/Tour.docs.tsx
  • apps/web/src/components/ui/components/Tour/Tour.tsx
  • apps/web/src/components/ui/foundations/controls.docs.tsx
  • apps/web/src/components/ui/foundations/surfaces.docs.tsx
  • apps/web/src/components/ui/index.ts
  • apps/web/src/components/ui/utils/button-activation.ts
  • apps/web/src/components/ui/utils/button-finishes.ts
  • apps/web/src/components/ui/utils/control-sizes.ts
  • apps/web/src/components/ui/utils/variants.ts
  • apps/web/src/components/view-shell/ListDropdowns.test.tsx
  • apps/web/src/components/view-shell/ListDropdowns.tsx
  • apps/web/src/components/view-shell/ListHeader.tsx
  • apps/web/src/components/view-shell/MobileFilterDrawer.tsx
  • apps/web/src/components/view-shell/SearchBar.tsx
  • apps/web/src/components/view-shell/ViewCreateButton.tsx
  • apps/web/src/components/view-shell/ViewShell.test.tsx
  • apps/web/src/components/view-shell/ViewShell.tsx
  • apps/web/src/components/view-shell/ViewSidebar.tsx
  • apps/web/src/features/access-requests/components/AccessLevelSelect.tsx
  • apps/web/src/features/access-requests/views/DirectAccessInvite.tsx
  • apps/web/src/features/access-requests/views/PermissionRequestsView.tsx
  • apps/web/src/features/access-requests/views/RequestAccessView.tsx
  • apps/web/src/features/agent-interactions/components/LiveElicitation.tsx
  • apps/web/src/features/agent-interactions/components/PermissionOptions.tsx
  • apps/web/src/features/agent-reviews/components/import-plan-card.tsx
  • apps/web/src/features/agent-reviews/components/review-navigation.tsx
  • apps/web/src/features/agent-reviews/views/review-stack.tsx
  • apps/web/src/features/agents-view/components/AgentsSidebar.tsx
  • apps/web/src/features/agents-view/components/ChatComposer.tsx
  • apps/web/src/features/agents-view/components/ModelSelector.tsx
  • apps/web/src/features/agents-view/components/Topbar.tsx
  • apps/web/src/features/agents-view/views/AgentPicker.tsx
  • apps/web/src/features/agents-view/views/MobileAgentPicker.tsx
  • apps/web/src/features/agents-view/views/RepositoryPicker.tsx
  • apps/web/src/features/auth/EmailAuth.tsx
  • apps/web/src/features/billing-lab/views/billing-lab.tsx
  • apps/web/src/features/block-agent/component/AgentComposer.tsx
  • apps/web/src/features/block-agent/component/AgentSplitHeader.tsx
  • apps/web/src/features/block-agent/component/ArchivedSessionFooter.tsx
  • apps/web/src/features/block-agent/ui/AgentInput.tsx
  • apps/web/src/features/block-agent/ui/AgentModelSelector.tsx
  • apps/web/src/features/block-agent/ui/FailureNoticeCard.tsx
  • apps/web/src/features/block-agent/ui/QueuedPrompts.test.tsx
  • apps/web/src/features/block-agent/ui/QueuedPrompts.tsx
  • apps/web/src/features/block-agent/ui/ToolApprovalCard.tsx
  • apps/web/src/features/block-agent/ui/ToolErrorCard.tsx
  • apps/web/src/features/block-ai/ai-block.tsx
  • apps/web/src/features/block-ai/components/main-menu.tsx
  • apps/web/src/features/block-ai/components/notices.tsx
  • apps/web/src/features/block-ai/components/paint-swatch.tsx
  • apps/web/src/features/block-ai/components/properties-panel.tsx
  • apps/web/src/features/block-ai/components/status-bar.tsx
  • apps/web/src/features/block-ai/components/tool-bar.tsx
  • apps/web/src/features/block-ai/views/artboards-panel.tsx
  • apps/web/src/features/block-ai/views/layers-panel.tsx
  • apps/web/src/features/block-call/component/CallRecording/CallRecordingBody.tsx
  • apps/web/src/features/block-call/component/CallRecording/CallRecordingSplitHeader.tsx
  • apps/web/src/features/block-call/views/CallDetailView.tsx
  • apps/web/src/features/block-canvas/components/arrange-controls.tsx
  • apps/web/src/features/block-canvas/components/selection-layout-inspector.tsx
  • apps/web/src/features/block-canvas/views/asset-picker.tsx
  • apps/web/src/features/block-canvas/views/canvas-toolbars.tsx
  • apps/web/src/features/block-canvas/views/canvas-view.tsx
  • apps/web/src/features/block-code/component/CodeSearchPanel.tsx
  • apps/web/src/features/block-code/component/TopBar.tsx
  • apps/web/src/features/block-database/component/Block.tsx
  • apps/web/src/features/block-database/component/TopBar.tsx
  • apps/web/src/features/block-database/component/WebhooksDialog.tsx
  • apps/web/src/features/block-database/views/database-page-actions.tsx
  • apps/web/src/features/block-email/EmailThreadHostView.tsx
  • apps/web/src/features/block-email/component/EmailTaskButton.tsx
  • apps/web/src/features/block-email/component/EmailThreadControls.tsx
  • apps/web/src/features/block-email/component/EmailThreadHeaderActions.tsx
  • apps/web/src/features/block-email/component/TopBar.tsx
  • apps/web/src/features/block-email/component/useEmailThreadTools.tsx
  • apps/web/src/features/block-fig/components/libraries-dialog.tsx
  • apps/web/src/features/block-fig/components/library-updates.tsx
  • apps/web/src/features/block-fig/components/publish-dialog.tsx
  • apps/web/src/features/block-fig/components/review-buttons.tsx
  • apps/web/src/features/block-fig/components/session-notice.tsx
  • apps/web/src/features/block-fig/fig-block.tsx
  • apps/web/src/features/block-form/components/builder/booking-card.tsx
  • apps/web/src/features/block-form/components/builder/booking-link-dialog.tsx
  • apps/web/src/features/block-form/components/builder/builder-chrome.tsx
  • apps/web/src/features/block-form/components/builder/question-footer.tsx
  • apps/web/src/features/block-form/components/builder/section-card.tsx
  • apps/web/src/features/block-form/components/builder/type-menu.tsx
  • apps/web/src/features/block-form/components/poll/poll-composer.tsx
  • apps/web/src/features/block-form/components/respond/respond-screens.tsx
  • apps/web/src/features/block-form/components/share/audience-panel.tsx
  • apps/web/src/features/block-form/form-block.tsx
  • apps/web/src/features/block-form/form-link-sharing.tsx
  • apps/web/src/features/block-form/form-respond-page.tsx
  • apps/web/src/features/block-form/views/builder-view.tsx
  • apps/web/src/features/block-form/views/form-card-view.tsx
  • apps/web/src/features/block-form/views/form-page-view.tsx
  • apps/web/src/features/block-form/views/respond-view.tsx
  • apps/web/src/features/block-form/views/share-tab-view.tsx
  • apps/web/src/features/block-image/component/TopBar.tsx
  • apps/web/src/features/block-md/comments/CommentThreadDrawer.tsx
  • apps/web/src/features/block-md/component/ComposeSkill.tsx
  • apps/web/src/features/block-md/component/ComposeTask.tsx
  • apps/web/src/features/block-md/component/DispatchAgentMenu.tsx
  • apps/web/src/features/block-md/component/FormatTools.tsx
  • apps/web/src/features/block-md/component/InlinePropertyValue.tsx
  • apps/web/src/features/block-md/component/InlineTaskGithubPullRequests.tsx
  • apps/web/src/features/block-md/component/InlineTaskProperties.tsx
  • apps/web/src/features/block-md/component/MarkdownPopup.tsx
  • apps/web/src/features/block-md/component/MediaSelector.tsx
  • apps/web/src/features/block-md/component/RecoverTaskDrafts.tsx
  • apps/web/src/features/block-md/component/TableInsert.tsx
  • apps/web/src/features/block-md/component/TaskComposerPropertyEditor.tsx
  • apps/web/src/features/block-md/component/TaskDuplicateMatches.tsx
  • apps/web/src/features/block-md/component/TouchSelectionToolbar.tsx
  • apps/web/src/features/block-md/component/sidepanel/MarkdownSidePanelSections.tsx
  • apps/web/src/features/block-md/component/useMarkdownDocumentTools.tsx
  • apps/web/src/features/block-md/history/HistoryToolbar.tsx
  • apps/web/src/features/block-md/views/compose-document.tsx
  • apps/web/src/features/block-pdf/component/MarkupToolbar.tsx
  • apps/web/src/features/block-pdf/component/PDFPopup.tsx
  • apps/web/src/features/block-pdf/component/PdfSplitToolbar.tsx
  • apps/web/src/features/block-pdf/component/TopBar.tsx
  • apps/web/src/features/block-pdf/component/placeables/Signature.tsx
  • apps/web/src/features/block-pdf/component/sidepanel/PdfSidePanelSections.tsx
  • apps/web/src/features/block-pptx/components/animation-pane.tsx
  • apps/web/src/features/block-pptx/components/chart-controls.tsx
  • apps/web/src/features/block-pptx/components/comments-pane.tsx
  • apps/web/src/features/block-pptx/components/effects-pane.tsx
  • apps/web/src/features/block-pptx/components/equation-editor.tsx
  • apps/web/src/features/block-pptx/components/export-dialog.tsx
  • apps/web/src/features/block-pptx/components/find-replace.tsx
  • apps/web/src/features/block-pptx/components/format-pane.tsx
  • apps/web/src/features/block-pptx/components/header-footer-dialog.tsx
  • apps/web/src/features/block-pptx/components/link-dialog.tsx
  • apps/web/src/features/block-pptx/components/presenter-view.tsx
  • apps/web/src/features/block-pptx/components/print-dialog.tsx
  • apps/web/src/features/block-pptx/components/rename-layout-dialog.tsx
  • apps/web/src/features/block-pptx/components/ribbon/animations-tab.tsx
  • apps/web/src/features/block-pptx/components/ribbon/controls.tsx
  • apps/web/src/features/block-pptx/components/ribbon/deck-setup-controls.tsx
  • apps/web/src/features/block-pptx/components/ribbon/equation-tab.tsx
  • apps/web/src/features/block-pptx/components/ribbon/home-tab.tsx
  • apps/web/src/features/block-pptx/components/ribbon/insert-tab.tsx
  • apps/web/src/features/block-pptx/components/ribbon/other-tabs.tsx
  • apps/web/src/features/block-pptx/components/ribbon/picture-format-tab.tsx
  • apps/web/src/features/block-pptx/components/ribbon/review-tab.tsx
  • apps/web/src/features/block-pptx/components/ribbon/slide-master-tab.tsx
  • apps/web/src/features/block-pptx/components/ribbon/table-tabs.tsx
  • apps/web/src/features/block-pptx/components/selection-pane.tsx
  • apps/web/src/features/block-pptx/components/slide-rail.tsx
  • apps/web/src/features/block-pptx/components/slide-size-dialog.tsx
  • apps/web/src/features/block-pptx/components/smartart/smartart-dialog.tsx
  • apps/web/src/features/block-pptx/components/smartart/smartart-tabs.tsx
  • apps/web/src/features/block-pptx/components/spelling-pane.tsx
  • apps/web/src/features/block-pptx/pptx-block.tsx
  • apps/web/src/features/block-pptx/views/pptx-editor.tsx
  • apps/web/src/features/block-pr/component/MergePullRequestButton.tsx
  • apps/web/src/features/block-pr/component/PullRequestActionsButton.tsx
  • apps/web/src/features/block-pr/component/sidepanel/PrAgentSessionsSection.tsx
  • apps/web/src/features/block-pr/hooks/usePrShare.tsx
  • apps/web/src/features/block-pr/views/PrDetail.tsx
  • apps/web/src/features/block-project/component/TopBar.tsx
  • apps/web/src/features/block-psd/components/dialogs.tsx
  • apps/web/src/features/block-psd/components/notice-banner.tsx
  • apps/web/src/features/block-psd/components/session-notice.tsx
  • apps/web/src/features/block-psd/psd-block.tsx
  • apps/web/src/features/block-psd/views/psd-editor.tsx
  • apps/web/src/features/block-spreadsheet/SpreadsheetDemo.tsx
  • apps/web/src/features/block-spreadsheet/components/CellListMenu.tsx
  • apps/web/src/features/block-spreadsheet/components/ChartDialog.tsx
  • apps/web/src/features/block-spreadsheet/components/DateFormatDialog.test.tsx
  • apps/web/src/features/block-spreadsheet/components/DateFormatDialog.tsx
  • apps/web/src/features/block-spreadsheet/components/DropdownDialog.test.tsx
  • apps/web/src/features/block-spreadsheet/components/DropdownDialog.tsx
  • apps/web/src/features/block-spreadsheet/components/FormulaBar.test.tsx
  • apps/web/src/features/block-spreadsheet/components/SpreadsheetActionMenus.tsx
  • apps/web/src/features/block-spreadsheet/components/SpreadsheetDialogs.tsx
  • apps/web/src/features/block-spreadsheet/components/SpreadsheetGoalSeekDialog.test.tsx
  • apps/web/src/features/block-spreadsheet/components/SpreadsheetGoalSeekDialog.tsx
  • apps/web/src/features/block-spreadsheet/components/SpreadsheetSheetTabs.test.tsx
  • apps/web/src/features/block-spreadsheet/components/SpreadsheetSheetTabs.tsx
  • apps/web/src/features/block-spreadsheet/components/SpreadsheetToolbar.test.tsx
  • apps/web/src/features/block-spreadsheet/components/SpreadsheetToolbar.tsx
  • apps/web/src/features/block-spreadsheet/components/SpreadsheetToolbarMenus.tsx
  • apps/web/src/features/block-spreadsheet/components/SpreadsheetWorkbookDialogs.test.tsx
  • apps/web/src/features/block-spreadsheet/components/SpreadsheetWorkbookDialogs.tsx
  • apps/web/src/features/block-spreadsheet/components/TableColumnMenu.tsx
  • apps/web/src/features/block-spreadsheet/components/TableDialog.tsx
  • apps/web/src/features/block-spreadsheet/components/TableFilterPanel.tsx
  • apps/web/src/features/block-spreadsheet/components/TableGroupByDialog.tsx
  • apps/web/src/features/block-spreadsheet/components/TableMenu.tsx
  • apps/web/src/features/block-spreadsheet/views/SpreadsheetDraftMenu.tsx
  • apps/web/src/features/block-spreadsheet/views/SpreadsheetEditor.tsx
  • apps/web/src/features/block-spreadsheet/views/UploadedWorkbook.tsx
  • apps/web/src/features/block-unknown/component/UnknownContent.tsx
  • apps/web/src/features/block-write/browser-test/fixture.tsx
  • apps/web/src/features/block-write/components/DocxFindBar.tsx
  • apps/web/src/features/block-write/components/DocxToolbar.tsx
  • apps/web/src/features/block-write/views/DocxMarginLayout.tsx
  • apps/web/src/features/calendar-notes/browser-test/fixture.tsx
  • apps/web/src/features/calendar-notes/components/note-dialog.tsx
  • apps/web/src/features/calendar-notes/components/notes-section.tsx
  • apps/web/src/features/calendar-view/browser-test/fixture.tsx
  • apps/web/src/features/calendar-view/components/AddToCalendarButton.tsx
  • apps/web/src/features/calendar-view/components/CalendarCreateMenu.tsx
  • apps/web/src/features/calendar-view/components/CalendarSearch.tsx
  • apps/web/src/features/calendar-view/components/CalendarSearchFilters.tsx
  • apps/web/src/features/calendar-view/components/CalendarSidebar.tsx
  • apps/web/src/features/calendar-view/components/EventGuests.tsx
  • apps/web/src/features/calendar-view/components/EventJoinRequests.tsx
  • apps/web/src/features/calendar-view/components/EventRsvpSection.tsx
  • apps/web/src/features/calendar-view/components/Header.tsx
  • apps/web/src/features/calendar-view/components/Page.tsx
  • apps/web/src/features/calendar-view/components/SelectedEventDetails.tsx
  • apps/web/src/features/calendar-view/components/SetupStatus.tsx
  • apps/web/src/features/calendar-view/components/SharedEventActions.tsx
  • apps/web/src/features/calendar/availability/CopyAvailabilityButton.tsx
  • apps/web/src/features/calendar/availability/CopyAvailabilityDialog.test.tsx
  • apps/web/src/features/calendar/availability/CopyAvailabilityDialog.tsx
  • apps/web/src/features/calendar/components/CalendarSettingsDropdown.tsx
  • apps/web/src/features/calendar/components/EventDetails.tsx
  • apps/web/src/features/calendar/components/EventReplacementDialog.tsx
  • apps/web/src/features/calendar/components/EventRsvpScopeDialog.tsx
  • apps/web/src/features/calendar/components/MonthDrawer.tsx
  • apps/web/src/features/calendar/components/PeriodSelector.tsx
  • apps/web/src/features/calendar/components/SourceControls.tsx
  • apps/web/src/features/calendar/components/TurnOffCalendarDialog.tsx
  • apps/web/src/features/calendar/components/composer/EventForm.tsx
  • apps/web/src/features/calendar/components/composer/EventGuestsEditor.tsx
  • apps/web/src/features/calendar/components/composer/RecurrenceBuilder.tsx
  • apps/web/src/features/calendar/components/connected-calendars.tsx
  • apps/web/src/features/calls-view/components/calls-header.tsx
  • apps/web/src/features/changes/components/ChangesHeader.tsx
  • apps/web/src/features/changes/components/ChangesNotice.tsx
  • apps/web/src/features/changes/components/ChangesReadyCard.tsx
  • apps/web/src/features/changes/components/ChangesToggleButton.tsx
  • apps/web/src/features/changes/components/CopyFilePathButton.tsx
  • apps/web/src/features/changes/components/NoteAnnotation.tsx
  • apps/web/src/features/changes/components/ReviewNotesChip.tsx
  • apps/web/src/features/changes/debug/Gallery.tsx
  • apps/web/src/features/changes/views/ChangesControls.tsx
  • apps/web/src/features/changes/views/ChangesPane.tsx
  • apps/web/src/features/channel-invitations/ChannelInviteAcceptance.tsx
  • apps/web/src/features/channel/Attachments/SectionHeader.tsx
  • apps/web/src/features/channel/Bots/BotAdvancedSection.tsx
  • apps/web/src/features/channel/Bots/BotCreatePage.tsx
  • apps/web/src/features/channel/Bots/BotCreationResult.tsx
  • apps/web/src/features/channel/Bots/BotDeleteDialog.tsx
  • apps/web/src/features/channel/Bots/BotDetailActions.tsx
  • apps/web/src/features/channel/Bots/BotDetailPage.tsx
  • apps/web/src/features/channel/Bots/BotInviteSelect.tsx
  • apps/web/src/features/channel/Bots/BotProfileFields.tsx
  • apps/web/src/features/channel/Bots/BotWebhooksSection.tsx
  • apps/web/src/features/channel/Bots/CreateBotTokenDialog.tsx
  • apps/web/src/features/channel/Bots/CredentialField.tsx
  • apps/web/src/features/channel/Bots/MintCredential.tsx
  • apps/web/src/features/channel/Call/CallControls/CallControlBar.tsx
  • apps/web/src/features/channel/Call/ChannelCallButton.tsx
  • apps/web/src/features/channel/Call/ChannelCallTab.tsx
  • apps/web/src/features/channel/Call/NewMeetingButton.tsx
  • apps/web/src/features/channel/Call/chat/GuestCallChat.tsx
  • apps/web/src/features/channel/Calls/ChannelCallsTab.tsx
  • apps/web/src/features/channel/Channel/ChannelDetail.tsx
  • apps/web/src/features/channel/Channel/ChannelTitleMenu.tsx
  • apps/web/src/features/channel/Channel/tests/channel-detail-top-bar.test.tsx
  • apps/web/src/features/channel/CreateChannelModal.tsx
  • apps/web/src/features/channel/Input/ActionButton.tsx
  • apps/web/src/features/channel/Input/ComposerAddMenu.tsx
  • apps/web/src/features/channel/Input/FormatButtons.tsx
  • apps/web/src/features/channel/Input/SendAction.tsx
  • apps/web/src/features/channel/Media/MediaGrid.tsx
  • apps/web/src/features/channel/Media/MediaViewerDialog.tsx
  • apps/web/src/features/channel/Message/Content.tsx
  • apps/web/src/features/channel/Message/EmojiReactionPopover.tsx
  • apps/web/src/features/channel/Message/ReactionChip.tsx
  • apps/web/src/features/channel/Message/Reactions.tsx
  • apps/web/src/features/channel/Participants/ChannelBotRow.tsx
  • apps/web/src/features/channel/Participants/ChannelBotsPanel.tsx
  • apps/web/src/features/channel/Participants/ChannelJoinLinkButton.test.tsx
  • apps/web/src/features/channel/Participants/ChannelJoinLinkButton.tsx
  • apps/web/src/features/channel/Participants/ParticipantsActionSheet.tsx
  • apps/web/src/features/channel/Participants/ParticipantsAddPanel.tsx
  • apps/web/src/features/channel/Participants/ParticipantsListItem.tsx
  • apps/web/src/features/channel/Participants/ParticipantsMobileLayout.tsx
  • apps/web/src/features/channel/channel-invite-button.tsx
  • apps/web/src/features/channel/views/channel-invite-modal.tsx
  • apps/web/src/features/channels-view/components/ChannelThreadsView.tsx
  • apps/web/src/features/channels-view/components/ChannelsMobileView.tsx
  • apps/web/src/features/channels-view/components/ConversationsCreateMenu.tsx
  • apps/web/src/features/channels-view/components/rail/ChannelLabelNameDialog.tsx
  • apps/web/src/features/channels-view/components/rail/ChannelLabelRows.tsx
  • apps/web/src/features/channels-view/components/rail/ChannelRailItems.tsx
  • apps/web/src/features/channels-view/components/rail/ChannelsRailSection.tsx
  • apps/web/src/features/channels-view/components/rail/ExpandedChannelsRail.tsx
  • apps/web/src/features/channels-view/components/rail/SmartTagDialog.tsx
  • apps/web/src/features/chat/ChatWithAgentButton.tsx
  • apps/web/src/features/command/components/CreateMenuAction.tsx
  • apps/web/src/features/command/mobile/MobileSearchResults.tsx
  • apps/web/src/features/command/sidebar/sidebar-create-menu.test.tsx
  • apps/web/src/features/command/sidebar/sidebar-create-menu.tsx
  • apps/web/src/features/connector-import/components/provider-row.tsx
  • apps/web/src/features/crm/activity-tasks-adapter.tsx
  • apps/web/src/features/crm/components/company-list-dialog.tsx
  • apps/web/src/features/crm/components/crm-sidebar.tsx
  • apps/web/src/features/crm/components/pipeline-dialog.tsx
  • apps/web/src/features/crm/components/pipeline-entry-cards.tsx
  • apps/web/src/features/crm/crm-link.tsx
  • apps/web/src/features/crm/pipeline-adapter.tsx
  • apps/web/src/features/crm/record-tasks-adapter.tsx
  • apps/web/src/features/crm/views/add-pipeline-record.tsx
  • apps/web/src/features/crm/views/company-detail.tsx
  • apps/web/src/features/crm/views/copy-link-button.tsx
  • apps/web/src/features/crm/views/create-company.tsx
  • apps/web/src/features/crm/views/create-contact.tsx
  • apps/web/src/features/crm/views/crm-settings.tsx
  • apps/web/src/features/crm/views/crm-workspace.tsx
  • apps/web/src/features/crm/views/export-companies.tsx
  • apps/web/src/features/crm/views/import-companies.tsx
  • apps/web/src/features/crm/views/pipeline-import.tsx
  • apps/web/src/features/crm/views/pipeline.tsx
  • apps/web/src/features/crm/views/record-detail.tsx
  • apps/web/src/features/crm/views/saved-views-menu.tsx
  • apps/web/src/features/database-query/views/query-editor.tsx
  • apps/web/src/features/database/components/board-lane-header.tsx
  • apps/web/src/features/database/components/board-menu.tsx
  • apps/web/src/features/database/components/csv-import-dialog.tsx
  • apps/web/src/features/database/components/database-board.tsx
  • apps/web/src/features/database/components/database-editor-toolbar.tsx
  • apps/web/src/features/database/components/database-load-state.tsx
  • apps/web/src/features/database/components/database-relation-cell.tsx
  • apps/web/src/features/database/components/database-search.tsx
  • apps/web/src/features/database/components/database-table-notices.tsx
  • apps/web/src/features/database/components/database-toolbar.tsx
  • apps/web/src/features/database/components/database-view-filters.tsx
  • apps/web/src/features/database/components/formula-editor.tsx
  • apps/web/src/features/database/components/new-board-group.tsx
  • apps/web/src/features/database/components/option-editor.tsx
  • apps/web/src/features/database/components/record-panel.tsx
  • apps/web/src/features/database/components/sort-panel.tsx
  • apps/web/src/features/database/components/timeline-menu.tsx
  • apps/web/src/features/database/components/view-control-popover.tsx
  • apps/web/src/features/database/views/database-board-view.tsx
  • apps/web/src/features/devtools/debug/ProjectionPlayground.tsx
  • apps/web/src/features/dictation/components/dictation-controls.tsx
  • apps/web/src/features/drive-view/components/FileDetail.tsx
  • apps/web/src/features/drive-view/components/folder-composer.tsx
  • apps/web/src/features/drive-view/drive-create-menu.tsx
  • apps/web/src/features/drive-view/filters/use-drive-filters.test.tsx
  • apps/web/src/features/drive-view/views/MarkdownDetail.tsx
  • apps/web/src/features/drive-view/views/drive-filter-menu.tsx
  • apps/web/src/features/drive-view/views/drive-header.tsx
  • apps/web/src/features/drive-view/views/drive-list.tsx
  • apps/web/src/features/drive-view/views/drive-sidebar.tsx
  • apps/web/src/features/email-compose/browser-test/fixture.tsx
  • apps/web/src/features/email-compose/components/draft-sync-status.tsx
  • apps/web/src/features/email-compose/components/email-date-selector.tsx
  • apps/web/src/features/email-compose/components/email-schedule-summary.tsx
  • apps/web/src/features/email-compose/components/mobile-compose-actions.tsx
  • apps/web/src/features/email-compose/components/mobile-reply-toolbar.tsx
  • apps/web/src/features/email-compose/queued-send-status.tsx
  • apps/web/src/features/email-compose/views/compose-layout.tsx
  • apps/web/src/features/email-compose/views/compose-toolbar.tsx
  • apps/web/src/features/email-compose/views/reply-envelope.tsx
  • apps/web/src/features/email-compose/views/reply-input.tsx
  • apps/web/src/features/email-message/components/calendar-file-preview.tsx
  • apps/web/src/features/email-message/components/calendar-invite-card.tsx
  • apps/web/src/features/email-message/components/email-message-top-bar.tsx
  • apps/web/src/features/email-message/components/message-actions.tsx
  • apps/web/src/features/email-message/views/email-message-body.tsx
  • apps/web/src/features/email-message/views/message-operation-recovery.tsx
  • apps/web/src/features/email-thread/calendar-invitation.test.tsx
  • apps/web/src/features/email-thread/components/copy-subject-button.tsx
  • apps/web/src/features/email-thread/views/bottom-reply-buttons.tsx
  • apps/web/src/features/email-thread/views/email-participants.tsx
  • apps/web/src/features/email-view/components/EmailControls.tsx
  • apps/web/src/features/email-view/components/EmailDetailView.tsx
  • apps/web/src/features/email-view/components/EmailHeader.tsx
  • apps/web/src/features/email-view/components/EmailInboxSelector.tsx
  • apps/web/src/features/email-view/components/EmailList.tsx
  • apps/web/src/features/email-view/components/EmailRowActions.tsx
  • apps/web/src/features/entity/EntitySelectionToolbarModal.tsx
  • apps/web/src/features/entity/bulk-edit/BulkDeleteView.tsx
  • apps/web/src/features/entity/bulk-edit/BulkMoveToProjectView.tsx
  • apps/web/src/features/entity/bulk-edit/BulkRenameEntitiesView.tsx
  • apps/web/src/features/entity/bulk-edit/components/EntityActionSelection.tsx
  • apps/web/src/features/entity/components/PrAgentSessionsChip.tsx
  • apps/web/src/features/entity/composed/list-entity/channel.tsx
  • apps/web/src/features/entity/composed/list-entity/foreign.tsx
  • apps/web/src/features/entity/extractors-notification/notification-content.tsx
  • apps/web/src/features/entity/extractors-notification/notification-row.tsx
  • apps/web/src/features/entity/extractors-notification/notification-stacks.tsx
  • apps/web/src/features/external-chat/components/chat-details.tsx
  • apps/web/src/features/external-chat/views/external-chat-view.test.tsx
  • apps/web/src/features/external-chat/views/external-chat-view.tsx
  • apps/web/src/features/gtm-invite/InviteLinksPortal.tsx
  • apps/web/src/features/gtm-invite/InviteOfferPanel.tsx
  • apps/web/src/features/gtm-invite/InviteWelcome.tsx
  • apps/web/src/features/home/components/HomeFilters.tsx
  • apps/web/src/features/home/components/HomeList.tsx
  • apps/web/src/features/home/home-section-boundary.tsx
  • apps/web/src/features/inbox/AdminConsentRequiredDialog.tsx
  • apps/web/src/features/inbox/ShareInboxConflictDialog.tsx
  • apps/web/src/features/integrations/import-linear/ImportLinear.tsx
  • apps/web/src/features/local-runtime/browser-test/fixture.tsx
  • apps/web/src/features/local-runtime/views/local-runtime-setup-dialog.tsx
  • apps/web/src/features/local-runtime/views/local-runtime-setup-panel.tsx
  • apps/web/src/features/meetings/components/meeting-call-heading.tsx
  • apps/web/src/features/meetings/components/meeting-list.tsx
  • apps/web/src/features/meetings/manage-meetings-dialog.tsx
  • apps/web/src/features/meetings/views/meeting-media-setup.tsx
  • apps/web/src/features/mobile-onboarding/MobileAuthWelcome.tsx
  • apps/web/src/features/mobile-onboarding/MobileOnboarding.tsx
  • apps/web/src/features/mobile-onboarding/OnboardingConnectAccounts.tsx
  • apps/web/src/features/mobile-onboarding/OnboardingCreateAccount.tsx
  • apps/web/src/features/next-soup/debug/DocumentWherePlayground.tsx
  • apps/web/src/features/next-soup/soup-view/NewCallButton.tsx
  • apps/web/src/features/next-soup/soup-view/filters-bar/consolidated-filter-chip.tsx
  • apps/web/src/features/next-soup/soup-view/filters-bar/group-dropdown.tsx
  • apps/web/src/features/next-soup/soup-view/filters-bar/inbox-selector.tsx
  • apps/web/src/features/next-soup/soup-view/filters-bar/search/search-facet-chip.tsx
  • apps/web/src/features/next-soup/soup-view/filters-bar/sort-dropdown.tsx
  • apps/web/src/features/next-soup/soup-view/filters-bar/soup-active-filters-bar.tsx
  • apps/web/src/features/next-soup/soup-view/filters-bar/soup-view-context-group.tsx
  • apps/web/src/features/next-soup/soup-view/filters-bar/soup-view-context-sort.tsx
  • apps/web/src/features/next-soup/soup-view/filters-bar/unified-filter-dropdown.tsx
  • apps/web/src/features/next-soup/soup-view/search-ask-ai-button.tsx
  • apps/web/src/features/next-soup/soup-view/soup-view-tabs.tsx
  • apps/web/src/features/next-soup/soup-view/soup-view.tsx
  • apps/web/src/features/notifications/components/Playground.tsx
  • apps/web/src/features/onboarding/components/team-panels.tsx
  • apps/web/src/features/paywall/components/ai-usage-limit-dialog.tsx
  • apps/web/src/features/paywall/components/paywall-view.tsx
  • apps/web/src/features/projects/components/project-collaborators.tsx
  • apps/web/src/features/projects/components/project-row-menu.test.tsx
  • apps/web/src/features/projects/components/project-row-menu.tsx
  • apps/web/src/features/projects/components/project-task-search.tsx
  • apps/web/src/features/projects/components/rename-project-dialog.tsx
  • apps/web/src/features/projects/project-description.tsx
  • apps/web/src/features/projects/project-detail.tsx
  • apps/web/src/features/projects/projects.tsx
  • apps/web/src/features/projects/views/add-project-tasks.test.tsx
  • apps/web/src/features/projects/views/add-project-tasks.tsx
  • apps/web/src/features/projects/views/create-project.test.tsx
  • apps/web/src/features/projects/views/create-project.tsx
  • apps/web/src/features/projects/views/project-assignment.test.tsx
  • apps/web/src/features/projects/views/project-assignment.tsx
  • apps/web/src/features/projects/views/project-tasks-list.tsx
  • apps/web/src/features/projects/views/project-workspace.tsx
  • apps/web/src/features/projects/views/projects-collection.test.tsx
  • apps/web/src/features/projects/views/projects-collection.tsx
  • apps/web/src/features/projects/views/projects-gantt.tsx
  • apps/web/src/features/projects/views/projects-sidebar.test.tsx
  • apps/web/src/features/projects/views/projects-sidebar.tsx
  • apps/web/src/features/property/component/AddPropertyButton.tsx
  • apps/web/src/features/property/component/PropertyValuePill.tsx
  • apps/web/src/features/property/component/modal/CreatePropertyModal.tsx
  • apps/web/src/features/property/extractors/property-pill-classes.ts
  • apps/web/src/features/property/side-panel/properties/EntityPropertiesSection.test.tsx
  • apps/web/src/features/property/side-panel/properties/EntityPropertiesSection.tsx
  • apps/web/src/features/property/tags/EntityRowTags.tsx
  • apps/web/src/features/property/tags/SidebarTagsSection.tsx
  • apps/web/src/features/property/tags/TagEditorDialog.tsx
  • apps/web/src/features/property/tags/TagPicker.tsx
  • apps/web/src/features/property/tags/TagPill.tsx
  • apps/web/src/features/property/tags/TagsRow.tsx
  • apps/web/src/features/property/utils/formatting.test.ts
  • apps/web/src/features/reminders/components/reminder-schedule-indicator.tsx
  • apps/web/src/features/reminders/email-reminder-status.test.tsx
  • apps/web/src/features/reminders/email-reminder-status.tsx
  • apps/web/src/features/reviews-view/components/ReviewsBoard.tsx
  • apps/web/src/features/reviews-view/components/ReviewsControls.tsx
  • apps/web/src/features/reviews-view/components/ReviewsList.tsx
  • apps/web/src/features/reviews-view/reviews-view.tsx
  • apps/web/src/features/routines/components/routine-run-button.tsx
  • apps/web/src/features/routines/components/routine-schedule-settings.tsx
  • apps/web/src/features/routines/components/routine-triggers.tsx
  • apps/web/src/features/routines/components/routines-list.tsx
  • apps/web/src/features/routines/components/template-card.tsx
  • apps/web/src/features/routines/views/activate-template-dialog.tsx
  • apps/web/src/features/routines/views/routine-creator.tsx
  • apps/web/src/features/routines/views/routine-detail.tsx
  • apps/web/src/features/routines/views/routine-history.tsx
  • apps/web/src/features/routines/views/routine-template-view.tsx
  • apps/web/src/features/routines/views/share-template-dialog.tsx
  • apps/web/src/features/saved-views/components/saved-view-dialog.tsx
  • apps/web/src/features/saved-views/components/saved-view-list.tsx
  • apps/web/src/features/scheduling/browser-test/fixture.tsx
  • apps/web/src/features/scheduling/calendar-actions.tsx
  • apps/web/src/features/scheduling/components/availability-exception-dialog.tsx
  • apps/web/src/features/scheduling/components/availability-hours-editor.tsx
  • apps/web/src/features/scheduling/components/availability-panel.tsx
  • apps/web/src/features/scheduling/components/availability-topbar.tsx
  • apps/web/src/features/scheduling/components/booking-card.tsx
  • apps/web/src/features/scheduling/components/booking-details-dialog.tsx
  • apps/web/src/features/scheduling/components/booking-duration-input.tsx
  • apps/web/src/features/scheduling/components/booking-host-selector.tsx
  • apps/web/src/features/scheduling/components/booking-page-editor.tsx
  • apps/web/src/features/scheduling/components/booking-page-leave-dialog.tsx
  • apps/web/src/features/scheduling/components/booking-picker.tsx
  • apps/web/src/features/scheduling/components/booking-value-input.tsx
  • apps/web/src/features/scheduling/components/bookings-date-range.tsx
  • apps/web/src/features/scheduling/components/event-editor-progress.tsx
  • apps/web/src/features/scheduling/components/event-editor.tsx
  • apps/web/src/features/scheduling/components/event-outcomes-chart.tsx
  • apps/web/src/features/scheduling/components/event-review.tsx
  • apps/web/src/features/scheduling/components/event-types-panel.tsx
  • apps/web/src/features/scheduling/components/insights-host-filter.tsx
  • apps/web/src/features/scheduling/components/insights-panel.tsx
  • apps/web/src/features/scheduling/components/insights-range-selector.tsx
  • apps/web/src/features/scheduling/components/reschedule-form.tsx
  • apps/web/src/features/scheduling/components/schedule-editor.tsx
  • apps/web/src/features/scheduling/components/scheduling-drawer-header.tsx
  • apps/web/src/features/scheduling/components/scheduling-filters.tsx
  • apps/web/src/features/scheduling/views/booking-receipt-view.tsx
  • apps/web/src/features/scheduling/views/booking-workspace-view.tsx
  • apps/web/src/features/scheduling/views/bookings-view.tsx
  • apps/web/src/features/scheduling/views/event-details-view.tsx
  • apps/web/src/features/scheduling/views/owner-settings-section.tsx
  • apps/web/src/features/scheduling/views/schedule-fields-view.tsx
  • apps/web/src/features/scheduling/views/scheduling-mobile-header.tsx
  • apps/web/src/features/settings/Account.tsx
  • apps/web/src/features/settings/Admin.tsx
  • apps/web/src/features/settings/Agents.tsx
  • apps/web/src/features/settings/ApiKeys.tsx
  • apps/web/src/features/settings/Appearance.tsx
  • apps/web/src/features/settings/BotSettingsList.tsx
  • apps/web/src/features/settings/CursorConnectPage.tsx
  • apps/web/src/features/settings/Email.tsx
  • apps/web/src/features/settings/Harness.tsx
  • apps/web/src/features/settings/Integrations.tsx
  • apps/web/src/features/settings/MobileApp.tsx
  • apps/web/src/features/settings/MobileSettingsSheet.tsx
  • apps/web/src/features/settings/PipedreamAppPicker.tsx
  • apps/web/src/features/settings/RuntimePairingPage.tsx
  • apps/web/src/features/settings/Tags.tsx
  • apps/web/src/features/settings/Team.tsx
  • apps/web/src/features/settings/TeamGeneral.tsx
  • apps/web/src/features/settings/TeamInviteLinkSection.tsx
  • apps/web/src/features/settings/TeamMembers.tsx
  • apps/web/src/features/settings/browser-test/fixture.tsx
  • apps/web/src/features/settings/browser-test/signatures/fixture.tsx
  • apps/web/src/features/settings/codex/components/CodexConnection.tsx
  • apps/web/src/features/settings/components/appearance-mode-picker.tsx
  • apps/web/src/features/settings/components/billing-plan-card.tsx
  • apps/web/src/features/settings/components/billing-settings-view.tsx
  • apps/web/src/features/settings/components/cursor-default-model.tsx
  • apps/web/src/features/settings/components/desktop-app.tsx
  • apps/web/src/features/settings/components/local-runtime-card.tsx
  • apps/web/src/features/settings/components/signature-form.tsx
  • apps/web/src/features/settings/components/team-seat-plan-select.tsx
  • apps/web/src/features/settings/connections/DiscoverView.tsx
  • apps/web/src/features/settings/connections/add-custom-mcp-dialog.tsx
  • apps/web/src/features/settings/connections/integrations-view.tsx
  • apps/web/src/features/settings/connections/leftover-row.tsx
  • apps/web/src/features/settings/connections/slack-channel-import/SlackChannelImportCard.tsx
  • apps/web/src/features/settings/connections/slack-channel-import/SlackChannelImportFlow.tsx
  • apps/web/src/features/settings/email-settings.tsx
  • apps/web/src/features/settings/primitives.tsx
  • apps/web/src/features/settings/views/billing-preview.tsx
  • apps/web/src/features/sidebar-promotion/components/promo-card.tsx
  • apps/web/src/features/slack-import/components/slack-import-card.tsx
  • apps/web/src/features/slack-import/views/import-dialog.tsx
  • apps/web/src/features/tasks-view/AGENTS.md
  • apps/web/src/features/tasks-view/components/TasksControls.tsx
  • apps/web/src/features/tasks-view/components/task-board.tsx
  • apps/web/src/features/tasks-view/components/task-list/TaskList.tsx
  • apps/web/src/features/tasks-view/views/task-board-view.tsx
  • apps/web/src/features/tasks-view/views/task-gantt-view.tsx
  • apps/web/src/features/tasks-view/views/task-saved-views.tsx
  • apps/web/src/features/team-invitations/TeamInviteAcceptance.tsx
  • apps/web/src/features/team-invitations/TeamInviteLinkAcceptance.tsx
  • apps/web/src/features/team-invitations/invite-modal.tsx
  • apps/web/src/features/theme/components/ThemeEdit3.tsx
  • apps/web/src/features/theme/components/ThemeEditor.tsx
  • apps/web/src/features/theme/utils/buttonTheme.ts
  • apps/web/src/features/theme/utils/themeColorTokens.ts
  • apps/web/src/features/theme/utils/themeCssVars.ts
  • apps/web/src/features/theme/utils/themeUtils.ts
  • apps/web/src/features/tours/ViewTour.tsx
  • apps/web/src/features/tours/components/ViewTourVideo.tsx
  • apps/web/src/features/tutorial/InteractiveOnboardingModal.tsx
  • apps/web/src/features/ui-gallery/components/CodeBlock.tsx
  • apps/web/src/features/universal-input/views/universal-composer.tsx
  • apps/web/src/features/usage/components/auto-reload-dialog.tsx
  • apps/web/src/features/usage/components/auto-reload-limit-notice.tsx
  • apps/web/src/features/usage/components/credit-purchase-dialog.tsx
  • apps/web/src/features/usage/components/monthly-limit.tsx
  • apps/web/src/features/usage/components/usage-info-dialog.tsx
  • apps/web/src/features/usage/views/usage-settings.tsx
  • apps/web/src/features/whatsapp-linked/components/account-card.tsx
  • apps/web/src/features/whatsapp-linked/components/chat-list.tsx
  • apps/web/src/features/whatsapp-linked/components/pairing-dialog.tsx
  • apps/web/src/features/whatsapp-linked/views/whatsapp-page.tsx
  • apps/web/src/index.css
  • apps/web/src/lib/core/comments/Thread.tsx
  • apps/web/src/lib/core/component/AI/component/AIChatEmptyState.tsx
  • apps/web/src/lib/core/component/AI/component/McpSetupCards.tsx
  • apps/web/src/lib/core/component/AI/component/debug/Attachment.tsx
  • apps/web/src/lib/core/component/AI/component/debug/Component.tsx
  • apps/web/src/lib/core/component/AI/component/debug/HttpStream.tsx
  • apps/web/src/lib/core/component/AI/component/debug/StaticMarkdownStream.tsx
  • apps/web/src/lib/core/component/AI/component/debug/stream/StreamDebugger.tsx
  • apps/web/src/lib/core/component/AI/component/input/ChatInput.test.tsx
  • apps/web/src/lib/core/component/AI/component/input/ChatInput.tsx
  • apps/web/src/lib/core/component/AI/component/input/ModelCatalogPicker.tsx
  • apps/web/src/lib/core/component/AI/component/input/ModelSelector.tsx
  • apps/web/src/lib/core/component/AI/component/input/SpeedToggle.tsx
  • apps/web/src/lib/core/component/AI/component/input/useAiDataConsent.tsx
  • apps/web/src/lib/core/component/AI/component/message/AssistantMessage.tsx
  • apps/web/src/lib/core/component/AI/component/message/UserMessage.tsx
  • apps/web/src/lib/core/component/AI/component/tool/Tool.tsx
  • apps/web/src/lib/core/component/AI/component/tool/calendar/DraftComposer.tsx
  • apps/web/src/lib/core/component/AI/component/tool/calendar/EventPreview.tsx
  • apps/web/src/lib/core/component/AI/component/tool/email/DraftComposer.tsx
  • apps/web/src/lib/core/component/DocumentPreview.tsx
  • apps/web/src/lib/core/component/EmailPermissionsBanner.tsx
  • apps/web/src/lib/core/component/FileDownload.tsx
  • apps/web/src/lib/core/component/FindBar.tsx
  • apps/web/src/lib/core/component/ForwardToChannel.tsx
  • apps/web/src/lib/core/component/ImageGalleryPreview.tsx
  • apps/web/src/lib/core/component/ImagePreview.tsx
  • apps/web/src/lib/core/component/LexicalMarkdown/component/accessory/CodeBoxAccessory.tsx
  • apps/web/src/lib/core/component/LexicalMarkdown/component/decorator/DocumentCard.tsx
  • apps/web/src/lib/core/component/LexicalMarkdown/component/decorator/DocumentMention.tsx
  • apps/web/src/lib/core/component/LexicalMarkdown/component/decorator/HorizontalRule.tsx
  • apps/web/src/lib/core/component/LexicalMarkdown/component/decorator/MagicChip/MagicChipPullRequest.tsx
  • apps/web/src/lib/core/component/LexicalMarkdown/component/decorator/MagicChip/MagicChipView.tsx
  • apps/web/src/lib/core/component/LexicalMarkdown/component/decorator/MarkdownVideo.tsx
  • apps/web/src/lib/core/component/LexicalMarkdown/component/decorator/MediaButtons.tsx
  • apps/web/src/lib/core/component/LexicalMarkdown/component/decorator/paste/PasteActionsMenu.tsx
  • apps/web/src/lib/core/component/LexicalMarkdown/component/decorator/paste/PasteTextViewer.tsx
  • apps/web/src/lib/core/component/LexicalMarkdown/component/menu/FloatingFormatMenu.tsx
  • apps/web/src/lib/core/component/LexicalMarkdown/component/menu/FloatingLinkMenu.tsx
  • apps/web/src/lib/core/component/Lightbox/Lightbox.tsx
  • apps/web/src/lib/core/component/NotificationsModal.tsx
  • apps/web/src/lib/core/component/TopBar/LoginButton.tsx
  • apps/web/src/lib/core/component/TopBar/ShareButton.test.tsx
  • apps/web/src/lib/core/component/TopBar/ShareButton.tsx
  • apps/web/src/lib/core/email-link/ProviderDialog.tsx
  • apps/web/src/lib/core/internal/App.tsx
  • apps/web/src/lib/core/internal/DataDebug.tsx
  • apps/web/src/lib/core/internal/ThemeDebug.tsx
  • apps/web/src/lib/core/mobile/IosPushNotificationModal.tsx
  • apps/web/src/lib/core/mobile/IpadUnsupportedDialog.tsx
  • apps/web/src/lib/core/mobile/NativeAppUpdateRequiredDialog.tsx
  • apps/web/src/lib/core/pipedream/connect-native.tsx
  • apps/web/src/lib/i18n/browser-test/menus.tsx
  • apps/web/src/routes/BasePath.tsx
  • apps/web/src/routes/TaskRoute.tsx
  • apps/web/src/routes/pages.tsx
  • apps/web/src/routes/public-booking-shell.tsx
  • apps/web/tests/e2e/helpers/local-app.ts
  • apps/web/tests/functional/whatsapp-linked.spec.ts
  • apps/web/tests/functional/whatsapp-linked/fixture.tsx
  • docs/agent-guide/tasks.md
  • docs/agent-guide/ui-conventions.md
  • docs/design/saved-views.md

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

Redesign the canonical app Button and derive its materials from the
existing theme renderer without changing saved themes.

Migrate callers to explicit variants, icon sizes, tooltip options, and
ButtonGroup.Button composition. Align header actions and composer controls
with the new sizing and materials, including secondary raised New actions.

BREAKING CHANGE: Button removes legacy label, square, depth, glass,
noTouchResize, and root tooltip configuration props. Use aria-label,
icon-* sizes, optional finishes, and tooltip options instead. ButtonGroup
inheritance now requires explicit ButtonGroup.Button composition.
@dev-rb
dev-rb force-pushed the rahul/feat-button-redesign branch from e6803a6 to 306f1f2 Compare October 26, 2026 19:15
Integrate the latest calendar, sharing, review, and media changes while
retaining the new Button API and explicit grouped-action composition.

Preserve upstream guest visibility, event permissions, shared-calendar
request gating, and download behavior. Adapt incoming note, import, and
file-preview actions to supported variants, labels, and icon sizing.
@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Why:
Button fills, states, and shadows do not need a JavaScript material
recipe for each theme.

What:
Move material values to CSS at each light/dark theme scope. Keep only
accent contrast selection in JavaScript and refresh the scope marker
during live color edits.
Why:
CSS button materials need the existing light/dark marker on each
independent theme scope.

What:
Mark appearance previews and the scheduling fixture with their theme
mode so they do not inherit another scope's button materials.
Keep channel tabs compact and reserve a small desktop gutter inside the
clipped header measurement region. The elevated outline extends beyond
the tab box, so the last tab needs space before the clipping boundary.
Match the compact channel tabs with 14px labels and a 28px minimum\nheight while retaining the existing selection and touch behavior.
Set channel sections and Email Signal/Noise to the shared medium tab
size. Retain the existing channel outline gutter and touch treatments.
Keep tab text, frame heights, and square icon sizes on the Button scale.
Separate label padding from tab frames so labels remain full-size
click targets, and retain the existing touch treatments.
Give labeled medium tabs 12px of horizontal padding while retaining
the shared text size, minimum height, and vertical padding. Keep
Button and square icon-tab sizing unchanged.
dev-rb added 21 commits October 28, 2026 15:15
Match send, microphone, and attachment controls at the shared 40px icon size on desktop and touch. Remove size overrides while preserving glyph dimensions and document the sizing convention.
Add an explicit neutral variant with grayscale light and dark materials and shared interaction and finish behavior. Keep primary accent-colored and leave existing consumers unchanged. Expose neutral in the gallery and document its role.
Restore medium send, microphone, and attachment controls. Use 20px desktop glyphs and 24px touch glyphs while preserving the shared touch minimum.
Keep chat, channel, and email send actions monochrome through the shared
SendButton. Preserve control sizing, pending states, and send behavior.
Document the send-specific exception to primary action styling.
Restore inverse-filled Settings actions through the shared neutral variant
instead of the obsolete descendant CTA override. Remove the Invite action's
custom fill and text colors while retaining its typography.

Keep accent actions, utility controls, destructive treatments, sizing, and
handlers unchanged.
Why:
- Compare the filled secondary treatment across existing neutral actions.
- Keep quiet controls subdued until interaction.

What:
- Replace application outline Button usages with secondary styling.
- Dim secondary and outline text at rest while preserving active feedback.
- Retain the outline API and comparison examples.
Why:
- Keep the Button migration aligned with current application behavior.

What:
- Merge main through 0549ed1.
- Preserve current dictation colors with the migrated Button API.
Why:
- New callers and fixtures still use the former Button and theme APIs.
- Locale data varies in day-period whitespace across JavaScript runtimes.

What:
- Migrate desktop tab actions and the task launcher to current Button props.
- Fix the theme fixture import and side-panel test selectors.
- Normalize only day-period whitespace in date-range assertions.
- Document isolated dependencies and the completed frontend validation.
Why:
- Keep the updated Button callers consistent with the frontend formatter.

What:
- Reflow JSX props, imports, and variant expressions without changing behavior.
Why:
- Keep the Button migration current with upstream changes.

What:
- Preserve main's distinct saved-view creation controls and keyboard scopes.
- Retain the migrated Button API and secondary creation styling.
- Align saved-view guidance with the resolved controls.
Why:
- Independent border, Button, glass, and avatar blocks scatter mode values.

What:
- Group dark defaults and light overrides in adjacent theme blocks.
- Preserve token values and existing root and device conditions.
- Document the shared runtime token structure for future changes.
Why:
- Keep the shared Button contract in durable rules rather than a migration log.

What:
- Document sizing, tooltips, activation, and explicit group composition.
- Correct stale dialog variant guidance and link the shared contract.
- Remove the obsolete Button migration document.
Why:
- Integrate current main without losing the redesigned Button contract.

What:
- Retain updated pull request actions and shared share-link handling.
- Preserve calendar invitation forwarding and reusable guest controls.
- Adapt affected actions to explicit ButtonGroup segments and current props.
Why:
- Expanded diffs and other disclosure controls looked selected because
  Button treated every aria-expanded state as a pressed action.

What:
- Restrict expansion-driven styling to triggers with aria-haspopup.
- Preserve disclosure semantics, popup feedback, and true toggle states.
- Document the distinction in the shared Button and diff-view guidance.
Why:
The desktop details test searches for tooltip text instead of the
button's accessible name and times out after the Button migration.

What:
Use the exact Show details name in the functional test and shared
e2e helper without changing the production control or test assertions.
@dev-rb
dev-rb enabled auto-merge (squash) October 28, 2026 19:18
Why:
Keep the Button redesign aligned with current application changes.

What:
Merge main and retain snippet-to-task creation with the migrated Button
API, preserving the new task handler and contextual tooltip.
Why:
Keep the redesign compatible with incoming application changes and the
current Button contract.

What:
Preserve document-menu downloads while resolving the Word toolbar merge.
Migrate return-to-call and document fixture triggers to accessible names
and supported tooltip options.
Why:
Routine template sharing introduces controls that need the current
Button API while preserving the grouped routine actions.

What:
Merge current main, keep template sharing in the routine menu, and use
supported primary and secondary variants in template controls.
@dev-rb
dev-rb disabled auto-merge October 28, 2026 20:58
@dev-rb
dev-rb merged commit ae814dc into main Oct 28, 2026
34 checks passed
@dev-rb
dev-rb deleted the rahul/feat-button-redesign branch October 28, 2026 20:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant