Skip to content

chore: Button Refactor - BED-6463 - #3030

Merged
KillahDillah merged 34 commits into
mainfrom
BED-6463-button-refactor
Aug 12, 2026
Merged

KillahDillah merged 34 commits into
mainfrom
BED-6463-button-refactor

Conversation

@KillahDillah

@KillahDillah KillahDillah commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Description

Button refactor!!!

Updated Button base with BaseUI, updated tests, replaces Icon and Text Buttons with new TextButton and IconButton. Updated color scheme. Left tons of notes for future tickets.

Motivation and Context

Resolves BED-6463

Figma links:
https://www.figma.com/design/pqlfSCxXVB5MjX5Gq50rW8/Alpha-%F0%9F%90%95?node-id=9-12&p=f&m=dev
https://www.figma.com/design/pqlfSCxXVB5MjX5Gq50rW8/Alpha-%F0%9F%90%95?node-id=431-1937&m=dev

Why is this change required? What problem does it solve?
Updated styling for Button,
split text variant and icon variant
replaced old text and icon buttons to use the new version
removed bad focus styling
and other no broken glass areas

How Has This Been Tested?

Please describe in detail how you tested your changes.
Include details of your testing environment, and the tests you ran to
see how your change affects other areas of the code, etc.

Manually with screen reader and keyboard navigation, visually, test suite passes

Screenshots (optional):

Updated styling:
OLD:
Screenshot 2026-07-28 at 4 55 15 PM
NEW:
Screenshot 2026-07-28 at 4 55 08 PM

OLD:
Screenshot 2026-07-28 at 4 56 08 PM
Screenshot 2026-07-28 at 5 30 02 PM
NEW:
Screenshot 2026-07-28 at 4 56 03 PM
Screenshot 2026-07-28 at 5 29 54 PM

OLD:
Screenshot 2026-07-27 at 1 31 31 PM
NEW:
Screenshot 2026-07-30 at 3 58 28 PM

OLD:
Screenshot 2026-07-28 at 5 51 04 PM
NEW:
Screenshot 2026-07-28 at 5 50 55 PM

OLD:
Screenshot 2026-07-30 at 4 28 13 PM
Screenshot 2026-07-30 at 4 27 23 PM

NEW:
Screenshot 2026-07-30 at 4 28 30 PM
Screenshot 2026-07-30 at 4 27 54 PM

OLD:
Screenshot 2026-07-28 at 6 42 39 PM
NEW:
Screenshot 2026-07-28 at 6 42 33 PM

OLD:
Screenshot 2026-07-30 at 3 59 25 PM
Screenshot 2026-07-30 at 4 00 14 PM

NEW:
Screenshot 2026-07-30 at 3 59 06 PM
Screenshot 2026-07-30 at 4 20 20 PM

STORYBOOK:
Screenshot 2026-07-30 at 4 03 32 PM

Types of changes

  • Chore (a change that does not modify the application functionality)
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Database Migrations

Checklist:

Summary by CodeRabbit

  • New Features

    • Added refreshed text and icon button styles across dialogs, menus, forms, tables, and navigation.
    • Improved dropdown, accordion, filter, and selection controls with clearer interaction states and accessibility labels.
    • Added consistent elevation and focus styling for cards, popovers, and interactive elements.
  • Bug Fixes

    • Improved dark-mode contrast and warning-state visibility.
    • Corrected spacing and layout in several views.
  • Tests

    • Updated UI tests to use more reliable element selectors.

@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR replaces the legacy button implementation with Base UI-backed Button, TextButton, and IconButton components, updates related theme tokens and stories, and migrates controls across shared UI, Explore, privilege-zone, and management views.

Changes

Shared button migration

Layer / File(s) Summary
Button API, stories, and theme foundation
package.json, packages/javascript/doodle-ui/src/components/Button/*, packages/javascript/doodle-ui/src/components/{Calendar,Card,Carousel,DatePicker}/*, packages/javascript/doodle-ui/src/tailwind/*
Button uses Base UI, TextButton and IconButton are exported, stories and consumers are updated, and elevation/focus-ring styling is changed.
Application controls
packages/javascript/bh-shared-ui/src/components/*, packages/javascript/bh-shared-ui/src/views/Explore/*, packages/javascript/bh-shared-ui/src/views/PrivilegeZones/*, packages/javascript/bh-shared-ui/src/views/OpenGraphManagement/*
Dialogs, selectors, navigation, tables, forms, accordions, links, and icon controls adopt the revised button components and associated styling.
JSX and layout normalization
cmd/ui/src/views/EarlyAccessFeatures/*, packages/javascript/bh-shared-ui/src/components/{EntityInfo,GroupManagementContent,LoginForm,LoginViaSSOForm}/*
Static JSX values, button variants, spacing, icon styling, and selected accessibility attributes are normalized.

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

Possibly related PRs

Suggested labels: enhancement, javascript

Suggested reviewers: maffkipp, thenando

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
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.
Title check ✅ Passed The title clearly identifies the primary change as a Button refactor and includes the associated ticket.
Description check ✅ Passed The description covers the required sections and provides the ticket, motivation, testing summary, screenshots, change type, and checklist.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch BED-6463-button-refactor

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

@KillahDillah KillahDillah changed the title Bed 6463 button refactor chore: Button Refactor - BED-6463 Jul 30, 2026
@KillahDillah KillahDillah self-assigned this Jul 30, 2026
@KillahDillah KillahDillah added the user interface A pull request containing changes affecting the UI code. label Jul 30, 2026
@KillahDillah
KillahDillah marked this pull request as ready for review July 30, 2026 21:43
@KillahDillah
KillahDillah requested review from a team as code owners July 30, 2026 21:43
@coderabbitai coderabbitai Bot added enhancement New feature or request javascript Pull requests that update javascript code labels Jul 30, 2026

@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: 12

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/javascript/doodle-ui/src/tailwind/plugin.ts (1)

519-526: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Commenting out --tw-ring-color leaves --tw-ring-shadow resolving to Tailwind's default ring color.

--tw-ring-shadow on line 525 still interpolates var(--tw-ring-color), which Tailwind's base layer defaults to its blue (rgb(59 130 246 / 0.5)). So .focus-ring now paints a correct-colored outline plus a blue box-shadow ring underneath it. If the box-shadow ring is no longer wanted, remove the ring variables/box-shadow entirely rather than only the color.

🎨 Option: keep only the outline-based ring
         '.focus-ring': {
             outline: 'var(--focus-ring-width) solid var(--focus-ring)',
             'outline-offset': 'var(--focus-ring-offset-width)',
-            '--tw-ring-offset-width': 'var(--focus-ring-offset-width)',
-            '--tw-ring-offset-color': 'var(--focus-ring-offset)',
-            // TODO causes issues with Text
-            // '--tw-ring-color': 'var(--focus-ring)',
-            '--tw-ring-offset-shadow': '0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)',
-            '--tw-ring-shadow':
-                '0 0 0 calc(var(--focus-ring-width) + var(--tw-ring-offset-width)) var(--tw-ring-color)',
-            'box-shadow': 'var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 `#0000`)',
         },
🤖 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 `@packages/javascript/doodle-ui/src/tailwind/plugin.ts` around lines 519 - 526,
Update the focus-ring styles around the commented-out --tw-ring-color and
--tw-ring-shadow declarations so the component no longer renders Tailwind’s
default blue box-shadow ring; remove the ring-related variables and box-shadow
when keeping the outline-only behavior, while preserving the correctly colored
outline.
🧹 Nitpick comments (8)
packages/javascript/doodle-ui/src/components/Button/Button.stories.tsx (2)

135-146: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Drop the commented-out variant argType block.

🤖 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 `@packages/javascript/doodle-ui/src/components/Button/Button.stories.tsx`
around lines 135 - 146, Remove the commented-out variant entry from the argTypes
configuration, leaving the active fontColor configuration unchanged.

204-218: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

aria-label values don't match the rendered icons.

Line 210 labels a star icon as "Gear Icon", and line 216 labels a filter icon the same way. Since these stories are the reference for IconButton accessibility usage, the labels should describe the actual action/icon.

🤖 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 `@packages/javascript/doodle-ui/src/components/Button/Button.stories.tsx`
around lines 204 - 218, The aria-label values on the secondary and disabled
IconButtonComponent examples do not match their rendered icons. Update the
labels in the Button stories so the secondary star button describes the star
icon and the disabled AppIcon.FilterOutline button describes the filter icon,
while leaving the primary example unchanged.
packages/javascript/doodle-ui/src/components/Calendar/Calendar.tsx (1)

20-20: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Prefer the package entrypoint over the deep path.

TextButtonVariants is re-exported from ../Button; importing from ../Button/Button bypasses the module boundary the index file establishes.

🤖 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 `@packages/javascript/doodle-ui/src/components/Calendar/Calendar.tsx` at line
20, Update the TextButtonVariants import in Calendar.tsx to use the ../Button
package entrypoint instead of the deep ../Button/Button path, preserving the
existing symbol usage.
packages/javascript/doodle-ui/src/components/Button/index.ts (1)

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

Also export the new prop types.

TextButtonProps/IconButtonProps (and IconButtonVariants) aren't re-exported, so wrapper components in bh-shared-ui must deep-import from ./Button to type their props.

♻️ Proposed export
-export { Button, ButtonVariants, IconButton, TextButton, TextButtonVariants, type ButtonProps } from './Button';
+export {
+    Button,
+    ButtonVariants,
+    IconButton,
+    IconButtonVariants,
+    TextButton,
+    TextButtonVariants,
+    type ButtonProps,
+    type IconButtonProps,
+    type TextButtonProps,
+} from './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 `@packages/javascript/doodle-ui/src/components/Button/index.ts` at line 16,
Update the barrel export in the Button component index to re-export
TextButtonProps, IconButtonProps, and IconButtonVariants alongside the existing
Button symbols, allowing consumers to import these prop types without
deep-importing the implementation module.
packages/javascript/doodle-ui/src/components/Button/Button.tsx (2)

69-72: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

fontColor on ButtonVariants is now dead surface.

Its own TODO says the only consumer was variant="text", which this PR removed, and TextButton owns fontColor going forward. Consider dropping it from ButtonVariants/ButtonProps so the public Button API doesn't expose a no-op prop.

🤖 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 `@packages/javascript/doodle-ui/src/components/Button/Button.tsx` around lines
69 - 72, Remove the obsolete fontColor variant from ButtonVariants and
ButtonProps, including its primary text-primary mapping, since Button no longer
consumes it. Keep fontColor owned by TextButton and ensure the public Button API
no longer exposes this no-op prop.

202-206: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Duplicated sizing/shape classes.

IconButtonVariants already emits rounded-full border-0 p-2 and size-fit/shrink-0; repeating them inline (plus has-[svg]:p-2) just adds twMerge work and two places to keep in sync. Fold the extra classes into the cva base.

🤖 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 `@packages/javascript/doodle-ui/src/components/Button/Button.tsx` around lines
202 - 206, Update the cva base used by IconButtonVariants to include the shared
sizing and shape classes currently duplicated in the Button className, including
the SVG padding behavior; then remove those duplicates from the inline class
list while preserving unrelated classes and variant handling.
packages/javascript/doodle-ui/src/tailwind/plugin.ts (1)

129-130: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Dangling // TODO remove.

The marker is only added in the light :root block; the same --tertiary-btn-border in .dark (line 373) is unannotated, so the cleanup will be easy to miss. Want me to open a tracking issue?

🤖 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 `@packages/javascript/doodle-ui/src/tailwind/plugin.ts` around lines 129 - 130,
Remove the dangling TODO comment above --tertiary-btn-border in the light :root
block; leave the variable and the corresponding dark-mode definition unchanged.
packages/javascript/bh-shared-ui/src/components/LabelWithCopy.tsx (1)

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

Use IconButton for this icon-only control.

This renders only a copy icon; packages/javascript/bh-shared-ui/src/components/Icon.tsx uses IconButton for the same aria-label + icon pattern. Using it here keeps icon-only sizing and focus behavior consistent.

Proposed change
-import { TextButton, Tooltip } from 'doodle-ui';
+import { IconButton, Tooltip } from 'doodle-ui';

-                <TextButton
+                <IconButton
                     onClick={handleCopy}
                     aria-label='Copy to clipboard'
                     className={cn('text-inherit text-sm', { invisible: !(!hoverOnly || hoverActive) })}>
                     <FontAwesomeIcon icon={faCopy} />
-                </TextButton>
+                </IconButton>

Also applies to: 52-57

🤖 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 `@packages/javascript/bh-shared-ui/src/components/LabelWithCopy.tsx` at line
19, Update the icon-only copy control in LabelWithCopy to use IconButton instead
of TextButton, following the aria-label and icon usage established in Icon.tsx.
Preserve the existing copy action and accessible label while adopting
IconButton’s consistent sizing and focus behavior.
🤖 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 `@package.json`:
- Around line 57-59: Move the `@base-ui/react` dependency from the root
package.json dependencies into packages/javascript/doodle-ui/package.json,
preserving its current version range. Ensure the doodle-ui package directly
declares the runtime dependency required by its `@base-ui/react/button` import.

In
`@packages/javascript/bh-shared-ui/src/components/FileIngestTable/FileIngestFilterDialog.tsx`:
- Around line 97-102: Update the IconButton in
packages/javascript/bh-shared-ui/src/components/FileIngestTable/FileIngestFilterDialog.tsx
lines 97-102 to use the accessible name “Open file ingest filters”. In
packages/javascript/bh-shared-ui/src/components/FileIngest/FileIngest.test.tsx
line 98 and
packages/javascript/bh-shared-ui/src/components/FileIngestTable/FileIngestTable.test.tsx
line 243, replace data-testid queries with role-based button queries matching
that accessible name.

In
`@packages/javascript/bh-shared-ui/src/components/HelpTexts/CodeController/CodeController.tsx`:
- Line 128: Replace the div wrapper in the CodeController markup with a phrasing
element, preserving its existing className and contents, so it remains valid
inside the Typography component='pre' container.

In
`@packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/CypherSearch.tsx`:
- Around line 339-340: Update the class names in the CypherSearch editor styling
to use descendant selectors for nested CodeMirror elements: change the
cm-content and cm-tooltip selectors in the affected class list to the underscore
descendant forms, preserving all other classes and behavior.

In
`@packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/SavedQueries/CommonSearches.tsx`:
- Around line 182-188: Update the TextButton rendering in CommonSearches to
expose the saved-queries state with aria-expanded bound to showCommonQueries and
aria-controls referencing the controlled panel’s existing id. Ensure the panel
has a matching stable id while preserving the current toggle behavior.

In
`@packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Filters/DateField.tsx`:
- Around line 60-68: Add an accessible aria-label to the icon-only TextButton in
the date field clear-control handler, identifying that it clears the selected
date. Preserve the existing disabled state, visibility styling, and
form.setValue/form.clearErrors behavior.

In
`@packages/javascript/bh-shared-ui/src/views/PrivilegeZones/History/FilterDialog/FilterDialog.tsx`:
- Around line 126-130: Update the confirm TextButton in FilterDialog so it no
longer triggers native form submission after handleConfirm; use a non-submit
button type while preserving the existing click handler and confirmation
behavior.

In
`@packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Save/TagForm/GlyphSelectDialog.tsx`:
- Around line 158-162: Update the IconButton in GlyphSelectDialog to use an
accessible name that describes clearing the selection, replacing the
glyph-focused aria-label; remove or correct the invalid aria-describedby value
so it references an actual element ID only if needed.

In `@packages/javascript/doodle-ui/src/components/Button/Button.stories.tsx`:
- Around line 36-42: Update the Button story controls to expose only currently
supported values: remove `text` from the `options` array and remove `default`
from `fontColor.options`, leaving `primary` as the sole font color option. Clean
up the associated stale TODO/commented configuration in the story.

In `@packages/javascript/doodle-ui/src/components/Button/Button.tsx`:
- Around line 21-28: The shared buttonBaseClasses currently applies
hover:underline to filled variants; remove that utility from the shared base and
add it to TextButtonBaseClasses so only text-style buttons underline on hover.
Preserve transparent, primary, secondary, and IconButton hover behavior without
introducing per-variant resets.

In `@packages/javascript/doodle-ui/src/components/Calendar/Calendar.tsx`:
- Line 58: Invoke the TextButtonVariants cva factory before passing its result
to cn/clsx in the Calendar configuration, updating nav_button, day, and the
caption SelectTrigger className. Preserve the existing text-button variant
styling by using the factory with the text variant rather than passing
TextButtonVariants itself.

In `@packages/javascript/doodle-ui/src/components/Carousel/Carousel.tsx`:
- Around line 211-220: Update CarouselPrev and CarouselNext in
packages/javascript/doodle-ui/src/components/Carousel/Carousel.tsx at lines
211-220 and 257-266: type both forwardRef props as React.ComponentProps<typeof
TextButton> instead of Button props, and remove size='small' from both
TextButton usages.

---

Outside diff comments:
In `@packages/javascript/doodle-ui/src/tailwind/plugin.ts`:
- Around line 519-526: Update the focus-ring styles around the commented-out
--tw-ring-color and --tw-ring-shadow declarations so the component no longer
renders Tailwind’s default blue box-shadow ring; remove the ring-related
variables and box-shadow when keeping the outline-only behavior, while
preserving the correctly colored outline.

---

Nitpick comments:
In `@packages/javascript/bh-shared-ui/src/components/LabelWithCopy.tsx`:
- Line 19: Update the icon-only copy control in LabelWithCopy to use IconButton
instead of TextButton, following the aria-label and icon usage established in
Icon.tsx. Preserve the existing copy action and accessible label while adopting
IconButton’s consistent sizing and focus behavior.

In `@packages/javascript/doodle-ui/src/components/Button/Button.stories.tsx`:
- Around line 135-146: Remove the commented-out variant entry from the argTypes
configuration, leaving the active fontColor configuration unchanged.
- Around line 204-218: The aria-label values on the secondary and disabled
IconButtonComponent examples do not match their rendered icons. Update the
labels in the Button stories so the secondary star button describes the star
icon and the disabled AppIcon.FilterOutline button describes the filter icon,
while leaving the primary example unchanged.

In `@packages/javascript/doodle-ui/src/components/Button/Button.tsx`:
- Around line 69-72: Remove the obsolete fontColor variant from ButtonVariants
and ButtonProps, including its primary text-primary mapping, since Button no
longer consumes it. Keep fontColor owned by TextButton and ensure the public
Button API no longer exposes this no-op prop.
- Around line 202-206: Update the cva base used by IconButtonVariants to include
the shared sizing and shape classes currently duplicated in the Button
className, including the SVG padding behavior; then remove those duplicates from
the inline class list while preserving unrelated classes and variant handling.

In `@packages/javascript/doodle-ui/src/components/Button/index.ts`:
- Line 16: Update the barrel export in the Button component index to re-export
TextButtonProps, IconButtonProps, and IconButtonVariants alongside the existing
Button symbols, allowing consumers to import these prop types without
deep-importing the implementation module.

In `@packages/javascript/doodle-ui/src/components/Calendar/Calendar.tsx`:
- Line 20: Update the TextButtonVariants import in Calendar.tsx to use the
../Button package entrypoint instead of the deep ../Button/Button path,
preserving the existing symbol usage.

In `@packages/javascript/doodle-ui/src/tailwind/plugin.ts`:
- Around line 129-130: Remove the dangling TODO comment above
--tertiary-btn-border in the light :root block; leave the variable and the
corresponding dark-mode definition unchanged.
🪄 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 YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 7d5dcd0d-4779-4f0b-9dda-ddb07c5c24af

📥 Commits

Reviewing files that changed from the base of the PR and between 74dd3da and 156285d.

⛔ Files ignored due to path filters (10)
  • .yarn/cache/@babel-runtime-npm-7.29.7-423e8cd4b6-9883b49517.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@base-ui-react-npm-1.6.0-b96a743958-7fed3b731e.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@base-ui-utils-npm-0.3.1-7fda044f8e-48fe7f0b1a.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@floating-ui-core-npm-1.8.0-7cb6ad2d03-762cd5677f.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@floating-ui-dom-npm-1.8.0-a6d2aa48a8-2e7d75fb70.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@floating-ui-react-dom-npm-2.1.9-751127e598-d775609760.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@floating-ui-utils-npm-0.2.12-72e5a495e8-ec4e176fb2.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/reselect-npm-5.2.0-4fd7475b1f-e53d37a35f.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/use-sync-external-store-npm-1.6.0-2db2af616d-b40ad2847b.zip is excluded by !**/.yarn/**, !**/*.zip
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (60)
  • cmd/ui/src/views/EarlyAccessFeatures/EarlyAccessFeatures.tsx
  • package.json
  • packages/javascript/bh-shared-ui/src/components/AnalyzeNowConfiguration/AnalyzeNowConfirmDialog.tsx
  • packages/javascript/bh-shared-ui/src/components/CitrixRDPConfiguration/CitrixRDPConfirmDialog.tsx
  • packages/javascript/bh-shared-ui/src/components/ColumnHeaders/ColumnHeaders.tsx
  • packages/javascript/bh-shared-ui/src/components/DropdownSelector/DropdownSelector.tsx
  • packages/javascript/bh-shared-ui/src/components/DropdownSelector/DropdownTriggerContents.tsx
  • packages/javascript/bh-shared-ui/src/components/DropdownSelector/constants.ts
  • packages/javascript/bh-shared-ui/src/components/EntityInfo/EntityInfoHeader.tsx
  • packages/javascript/bh-shared-ui/src/components/ExploreTable/TableControls.tsx
  • packages/javascript/bh-shared-ui/src/components/FileIngest/FileIngest.test.tsx
  • packages/javascript/bh-shared-ui/src/components/FileIngestTable/FileIngestFilterDialog.tsx
  • packages/javascript/bh-shared-ui/src/components/GroupManagementContent/GroupManagementContent.tsx
  • packages/javascript/bh-shared-ui/src/components/HelpTexts/CodeController/CodeController.tsx
  • packages/javascript/bh-shared-ui/src/components/Icon.tsx
  • packages/javascript/bh-shared-ui/src/components/LabelWithCopy.tsx
  • packages/javascript/bh-shared-ui/src/components/LoginForm/LoginForm.tsx
  • packages/javascript/bh-shared-ui/src/components/LoginViaSSOForm/LoginViaSSOForm.tsx
  • packages/javascript/bh-shared-ui/src/components/Navigation/MainNav.tsx
  • packages/javascript/bh-shared-ui/src/components/SSOProviderTable/SSOProviderTable.tsx
  • packages/javascript/bh-shared-ui/src/components/SimpleEnvironmentSelector/SimpleEnvironmentSelector.tsx
  • packages/javascript/bh-shared-ui/src/components/UserTokenManagementDialog/UserTokenManagementDialog.tsx
  • packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/CypherSearch.tsx
  • packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/EdgeFilter/EdgeFilteringDialog.tsx
  • packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/SavedQueries/CommonSearches.tsx
  • packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/SavedQueries/ConfirmDeleteQueryDialog.tsx
  • packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/SavedQueries/ConfirmUpdateQueryDialog.tsx
  • packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/SavedQueries/ImportQueryDialog.tsx
  • packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/SavedQueries/QuerySearchFilter.tsx
  • packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/SavedQueries/SaveQueryDialog.tsx
  • packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/SavedQueries/TagToZoneLabel.tsx
  • packages/javascript/bh-shared-ui/src/views/OpenGraphManagement/ActiveExtensionsCard.tsx
  • packages/javascript/bh-shared-ui/src/views/OpenGraphManagement/DeleteExtensionButton.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Details/Details.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Details/ObjectsAccordion.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Details/RulesAccordion.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Details/SearchBar.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Filters/DateField.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Filters/TagIdField.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/History/FilterDialog/ActionField.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/History/FilterDialog/FilterDialog.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/History/FilterDialog/MadeByField.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/History/NoteCell.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Save/RuleForm/DeleteRuleButton/DeleteRuleButton.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Save/RuleForm/ObjectSelect.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Save/RuleForm/SeedSelection.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Save/RuleForm/SeedSelectionPreview.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Save/TagForm/GlyphSelectDialog.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Save/TagForm/TagForm.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/ZoneIcon.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/fragments.tsx
  • packages/javascript/doodle-ui/src/components/Button/Button.stories.tsx
  • packages/javascript/doodle-ui/src/components/Button/Button.tsx
  • packages/javascript/doodle-ui/src/components/Button/index.ts
  • packages/javascript/doodle-ui/src/components/Calendar/Calendar.tsx
  • packages/javascript/doodle-ui/src/components/Card/Card.tsx
  • packages/javascript/doodle-ui/src/components/Carousel/Carousel.tsx
  • packages/javascript/doodle-ui/src/components/DatePicker/DatePicker.tsx
  • packages/javascript/doodle-ui/src/tailwind/plugin.ts
  • packages/javascript/doodle-ui/src/tailwind/preset.ts

Comment thread package.json Outdated
Comment thread packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/CypherSearch.tsx Outdated
Comment thread packages/javascript/doodle-ui/src/components/Button/Button.stories.tsx Outdated
Comment thread packages/javascript/doodle-ui/src/components/Button/Button.tsx
Comment thread packages/javascript/doodle-ui/src/components/Calendar/Calendar.tsx Outdated
Comment thread packages/javascript/doodle-ui/src/components/Carousel/Carousel.tsx Outdated

@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.

🧹 Nitpick comments (1)
packages/javascript/bh-shared-ui/src/components/DropdownSelector/DropdownTriggerContents.tsx (1)

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

Remove the render-time debug log.

console.log(open) runs on every render and will pollute production browser consoles.

Proposed fix
-        console.log(open);
🤖 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
`@packages/javascript/bh-shared-ui/src/components/DropdownSelector/DropdownTriggerContents.tsx`
at line 50, Remove the console.log(open) debug statement from the
DropdownTriggerContents render path, leaving the surrounding component behavior
unchanged.
🤖 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.

Nitpick comments:
In
`@packages/javascript/bh-shared-ui/src/components/DropdownSelector/DropdownTriggerContents.tsx`:
- Line 50: Remove the console.log(open) debug statement from the
DropdownTriggerContents render path, leaving the surrounding component behavior
unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 5c1b5cb5-7661-4524-a6fa-44dcc362c602

📥 Commits

Reviewing files that changed from the base of the PR and between 156285d and e073f46.

📒 Files selected for processing (2)
  • packages/javascript/bh-shared-ui/src/components/DropdownSelector/DropdownTriggerContents.tsx
  • packages/javascript/bh-shared-ui/src/components/DropdownSelector/constants.ts

@KillahDillah
KillahDillah force-pushed the BED-6463-button-refactor branch from 93207eb to 7d31fd0 Compare July 30, 2026 22:41

@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

🤖 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 `@packages/javascript/doodle-ui/src/components/Carousel/Carousel.tsx`:
- Around line 212-220: Add accessible labels to both carousel controls: update
the previous-slide TextButton near Carousel controls at
packages/javascript/doodle-ui/src/components/Carousel/Carousel.tsx lines 212-220
with aria-label “Previous slide”, and the next-slide TextButton at lines 259-267
with aria-label “Next slide”.
🪄 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 YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 06794829-585c-46f8-a3af-f2326f782995

📥 Commits

Reviewing files that changed from the base of the PR and between e073f46 and 7d31fd0.

📒 Files selected for processing (9)
  • packages/javascript/bh-shared-ui/src/components/DropdownSelector/DropdownTriggerContents.tsx
  • packages/javascript/bh-shared-ui/src/components/FileIngestTable/FileIngestFilterDialog.tsx
  • packages/javascript/bh-shared-ui/src/components/HelpTexts/CodeController/CodeController.tsx
  • packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/CypherSearch.tsx
  • packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/SavedQueries/CommonSearches.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Save/TagForm/GlyphSelectDialog.tsx
  • packages/javascript/doodle-ui/src/components/Button/Button.stories.tsx
  • packages/javascript/doodle-ui/src/components/Calendar/Calendar.tsx
  • packages/javascript/doodle-ui/src/components/Carousel/Carousel.tsx
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/javascript/bh-shared-ui/src/views/Explore/ExploreSearch/SavedQueries/CommonSearches.tsx
  • packages/javascript/doodle-ui/src/components/Calendar/Calendar.tsx
  • packages/javascript/bh-shared-ui/src/components/FileIngestTable/FileIngestFilterDialog.tsx
  • packages/javascript/bh-shared-ui/src/views/PrivilegeZones/Save/TagForm/GlyphSelectDialog.tsx

Comment thread packages/javascript/doodle-ui/src/components/Carousel/Carousel.tsx Outdated

<DialogActions>
<Button variant={'text'} className='p-2' onClick={closeDialog}>
<TextButton className='pr-2' onClick={closeDialog}>

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.

nit: can remove pr-2 as it gets padding from the component.

className={cn('text-contrast', iconClasses)}
data-testid='tier_zero_icon'
/>
<AppIcon.TierZero {...iconProps} size={16} className={cn(iconClasses)} data-testid='tier_zero_icon' />

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.

No need for the cn utility here.

Comment thread cmd/ui/src/views/Explore/ExploreSearch/ExploreSearch.tsx
Comment thread cmd/ui/src/views/Explore/ExploreSearch/ExploreSearch.tsx Outdated
it('displays a Filters button', async () => {
await act(async () => render(<FileIngest />));
const filterButton = screen.getByRole('button', { name: /app-icon-filter-outline/i });
const filterButton = screen.getByTestId('file_ingest_log-open_filter_dialog');

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.

We should consider getting by role over testId I think thats the preferred priority of the library. Also the rabbit makes a comment about it below.

Comment thread packages/javascript/doodle-ui/src/components/Button/Button.tsx

@TheNando TheNando 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.

Heroic effort! Just got a handful of comments.

aria-label='Toggle search widget'
data-testid='explore_search-container_header_expand-collapse-button'
className={classes.icon}
className='ml-1 px-4 rounded-none text-sm'

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.

Two conventions that apply here and should commonly be considered across the codebase:

  • Whenever possible, isolate layout clases to container components (the div with the icon button and the tabs)
  • Always question if CSS style overrides/additions represent a reusable case/variant (in which case, the style should be applied in Doodle as a variant) or an exceptional case where they must exist at the feature component level. Exceptional cases should be less common than variants.

With that in mind, I think you can entirely remove IconButton classes here. Left margin can become padding in the parent. The right padding can be collapsed into an increased gap for the parent. rounded-none and text-sm don't seem to do anything for IconButton.

I won't bog down this PR with every mention of this type of change, but I thought this was a good example to illustrate.

@KillahDillah KillahDillah Aug 11, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

So, rounded-none comes into place for the focus styles. Instead of a focus ring, it's a square to better match the Tabs next to it, kinda. But it looks a lot better without a border radius than with one, that's for sure.

text-sm makes the icon smaller, which matches the previous designs. I'm uncertain about making a small IconButton variant as our new designs do not reflect this.

This component but on the BHE side is using the Icon component, which I am leaving a note to replace in an upcoming ticket.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

checking with designer on rounded or non-rounded focus styles.

Comment thread packages/javascript/bh-shared-ui/src/components/Icon.tsx
@KillahDillah
KillahDillah force-pushed the BED-6463-button-refactor branch 4 times, most recently from 6cb0787 to c0be508 Compare August 12, 2026 16:25
@KillahDillah
KillahDillah force-pushed the BED-6463-button-refactor branch from c0be508 to f164695 Compare August 12, 2026 16:31
@KillahDillah
KillahDillah force-pushed the BED-6463-button-refactor branch from a503bcf to b6ae722 Compare August 12, 2026 18:30
@KillahDillah
KillahDillah merged commit 87d11fb into main Aug 12, 2026
13 of 14 checks passed
@KillahDillah
KillahDillah deleted the BED-6463-button-refactor branch August 12, 2026 19:02
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 12, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

enhancement New feature or request javascript Pull requests that update javascript code user interface A pull request containing changes affecting the UI code.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants