Skip to content

Enhance navigation components and improve UI consistency#3

Merged
agabaarnold merged 11 commits into
mainfrom
feat/app-layout
Jun 12, 2026
Merged

Enhance navigation components and improve UI consistency#3
agabaarnold merged 11 commits into
mainfrom
feat/app-layout

Conversation

@agabaarnold

Copy link
Copy Markdown
Owner

No description provided.

- Added "use client" directive to several components for client-side rendering.
- Reorganized imports for better readability and consistency across components.
- Enhanced class names and data attributes for better styling and accessibility.
- Updated dialog, context menu, command, and dropdown components to streamline props and improve functionality.
- Adjusted CSS variables for accent colors to ensure better visual consistency.
- Removed unnecessary comments and cleaned up code formatting for clarity.
…components

- Updated imports to use consistent semicolon usage in multiple files.
- Refactored Textarea, ToggleGroup, Toggle, Tooltip, and other components for improved readability and consistency.
- Adjusted spacing and indentation for better alignment and clarity.
- Ensured all components maintain a consistent structure and style.
- Minor adjustments to error handling and schema definitions for better clarity.
@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@agabaarnold, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 18 minutes and 5 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more credits in the billing tab to continue.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 79b77658-c9f5-4d47-b5b2-f6c88c59b88b

📥 Commits

Reviewing files that changed from the base of the PR and between 641a663 and 17abefc.

📒 Files selected for processing (1)
  • src/components/ui/pagination.tsx
📝 Walkthrough

Walkthrough

This PR adds an auth middleware and sidebar navigation/logout changes, updates many shared UI wrappers and widgets for client usage and prop-order behavior, and refreshes project config, styling, and dependency versions.

Changes

Auth and shell

Layer / File(s) Summary
Auth gate and root shell
src/middleware.ts, src/routes/__root.tsx, src/integrations/root-provider.tsx, src/routes/api/auth/$.ts, src/features/auth/components/sign-up-form.tsx, src/features/auth/schema/index.ts
authMiddleware redirects unauthenticated requests, the root route shell and query provider are reformatted, and the auth route/form/schema files are updated for formatting-only changes.
Sidebar navigation and logout
src/components/sidebar/app-sidebar.tsx, src/components/sidebar/nav-main.tsx, src/components/sidebar/nav-secondary.tsx, src/components/sidebar/nav-user.tsx, src/components/sidebar/user-avatar.tsx
The sidebar renders a new secondary settings entry and the user menu now signs out, shows a toast, and redirects to /sign-in.

Shared UI system and config

Layer / File(s) Summary
Base primitives and prop precedence
src/components/ui/accordion.tsx, src/components/ui/alert-dialog.tsx, src/components/ui/alert.tsx, src/components/ui/aspect-ratio.tsx, src/components/ui/avatar.tsx, src/components/ui/badge.tsx, src/components/ui/breadcrumb.tsx, src/components/ui/button-group.tsx, src/components/ui/button.tsx, src/components/ui/card.tsx, src/components/ui/command.tsx, src/components/ui/dialog.tsx, src/components/ui/direction.tsx, src/components/ui/empty.tsx, src/components/ui/field.tsx, src/components/ui/input.tsx, src/components/ui/item.tsx, src/components/ui/kbd.tsx, src/components/ui/label.tsx, src/components/ui/native-select.tsx, src/components/ui/pagination.tsx, src/components/ui/popover.tsx, src/components/ui/progress.tsx, src/components/ui/radio-group.tsx, src/components/ui/separator.tsx, src/components/ui/sheet.tsx, src/components/ui/skeleton.tsx, src/components/ui/spinner.tsx, src/components/ui/table.tsx, src/components/ui/textarea.tsx, src/components/ui/toggle.tsx
These shared wrappers mostly reorder JSX props, add type-only imports/client directives, and adjust class strings or variant definitions.
Composite menus and overlays
src/components/ui/calendar.tsx, src/components/ui/carousel.tsx, src/components/ui/chart.tsx, src/components/ui/checkbox.tsx, src/components/ui/collapsible.tsx, src/components/ui/combobox.tsx, src/components/ui/context-menu.tsx, src/components/ui/drawer.tsx, src/components/ui/dropdown-menu.tsx, src/components/ui/hover-card.tsx, src/components/ui/input-group.tsx, src/components/ui/input-otp.tsx, src/components/ui/menubar.tsx, src/components/ui/navigation-menu.tsx, src/components/ui/resizable.tsx, src/components/ui/scroll-area.tsx, src/components/ui/select.tsx, src/components/ui/sidebar.tsx, src/components/ui/slider.tsx, src/components/ui/switch.tsx, src/components/ui/tabs.tsx, src/components/ui/toggle-group.tsx, src/components/ui/tooltip.tsx
These higher-level components update popup, context, and layout wiring, including styling changes, client markers, and state or ref handling in the calendar, chart, carousel, sidebar, and select/menu stacks.
Forms and input controls
src/components/ui/checkbox.tsx, src/components/ui/input-group.tsx, src/components/ui/input-otp.tsx, src/components/ui/input.tsx, src/components/ui/item.tsx, src/components/ui/label.tsx, src/components/ui/radio-group.tsx, src/components/ui/switch.tsx, src/components/ui/textarea.tsx, src/components/ui/toggle.tsx, src/components/ui/toggle-group.tsx
Form-oriented controls add client markers or reshaped class strings, and a few inputs gain changed prop ordering or control-state attributes.
Complex stateful widgets
src/components/ui/calendar.tsx, src/components/ui/chart.tsx, src/components/ui/carousel.tsx, src/components/ui/sidebar.tsx
Calendar, chart, carousel, and sidebar internals are refactored around context, hooks, event wiring, and persisted state behavior.
Config, dependency, and style updates
.cta.json, .lintstagedrc.json, components.json, package.json, prisma.config.ts, src/lib/db.ts, src/lib/utils.ts, src/styles.css, vite.config.ts
Project config, dependency versions, Prisma setup, shared utility formatting, and global CSS/theme declarations are reformatted or adjusted.

Sequence Diagram(s)

No additional diagrams.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~90+ minutes

Possibly related PRs

  • agabaarnold/ims-app#1: Touches the same FormCheckbox component formatting and the same auth middleware flow.
  • agabaarnold/ims-app#2: Covers the sidebar and related navigation components that this PR extends with a secondary nav item and logout handling.
  • agabaarnold/ims-app#1: Introduces the earlier auth middleware pattern that matches the new redirect/session check in src/middleware.ts.

Poem

A bunny hop, a settings hop,
Through shells and menus, flip and drop.
I nibble props and class names neat,
Then sign me out with speedy feet.
🐇✨ The app now twinkles, crisp and bright,
While carrots of config line up just right.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/app-layout

@github-actions

github-actions Bot commented Jun 12, 2026

Copy link
Copy Markdown

React Doctor found 64 issues in 24 files · 3 errors & 61 warnings · score 58 / 100 (Critical) · vs main

Errors

61 warnings

src/components/ui/badge.tsx

  • ⚠️ L52 Non-component export in component file only-export-components

src/components/ui/breadcrumb.tsx

  • ⚠️ L72 Role used instead of HTML tag prefer-tag-over-role

src/components/ui/button-group.tsx

  • ⚠️ L35 Role used instead of HTML tag prefer-tag-over-role
  • ⚠️ L86 Non-component export in component file only-export-components

src/components/ui/button.tsx

  • ⚠️ L58 Non-component export in component file only-export-components

src/components/ui/calendar.tsx

  • ⚠️ L208 Event logic handled in an effect no-event-handler

src/components/ui/carousel.tsx

  • ⚠️ L33 React 19 API migration can break callers no-react19-deprecated-apis
  • ⚠️ L61 Redundant manual memoization react-compiler-no-manual-memoization
  • ⚠️ L69 Redundant manual memoization react-compiler-no-manual-memoization
  • ⚠️ L73 Redundant manual memoization react-compiler-no-manual-memoization
  • ⚠️ L77 Redundant manual memoization react-compiler-no-manual-memoization
  • ⚠️ L94 Data passed to parent via effect no-pass-data-to-parent
  • ⚠️ L94 Parent kept in sync with a callback effect no-prop-callback-in-effect
  • ⚠️ L97 Listener re-subscribes on every handler change advanced-event-handler-refs
  • ⚠️ L130 Role used instead of HTML tag prefer-tag-over-role
  • ⚠️ L172 Role used instead of HTML tag prefer-tag-over-role

src/components/ui/chart.tsx

  • ⚠️ L5 Heavy library loaded eagerly prefer-dynamic-import
  • ⚠️ L33 React 19 API migration can break callers no-react19-deprecated-apis
  • ⚠️ L95 Raw HTML injection can run unsafe markup no-danger
  • ⚠️ L149 useMemo before an early return rerender-memo-before-early-return
  • ⚠️ L149 Redundant manual memoization react-compiler-no-manual-memoization
  • ⚠️ L200 Chained array iterations js-combine-iterations
  • ⚠️ L218 Array index used as a key no-array-index-as-key
  • ⚠️ L328 Chained array iterations js-combine-iterations
  • ⚠️ L343 Array index used as a key no-array-index-as-key

src/components/ui/collapsible.tsx

  • ⚠️ L9 Multiple components in one file no-multi-comp
  • ⚠️ L18 Multiple components in one file no-multi-comp

src/components/ui/field.tsx

  • ⚠️ L81 Role used instead of HTML tag prefer-tag-over-role
  • ⚠️ L183 useMemo before an early return rerender-memo-before-early-return
  • ⚠️ L183 Redundant manual memoization react-compiler-no-manual-memoization
  • ⚠️ L204 Array index used as a key no-array-index-as-key

src/components/ui/hover-card.tsx

  • ⚠️ L9 Multiple components in one file no-multi-comp
  • ⚠️ L18 Multiple components in one file no-multi-comp

src/components/ui/input-group.tsx

  • ⚠️ L16 Role used instead of HTML tag prefer-tag-over-role
  • ⚠️ L43 Multiple components in one file no-multi-comp
  • ⚠️ L49 Click handler missing keyboard handler click-events-have-key-events
  • ⚠️ L59 Role used instead of HTML tag prefer-tag-over-role
  • ⚠️ L104 Multiple components in one file no-multi-comp

src/components/ui/input-otp.tsx

  • ⚠️ L40 Multiple components in one file no-multi-comp
  • ⚠️ L47 React 19 API migration can break callers no-react19-deprecated-apis
  • ⚠️ L71 Multiple components in one file no-multi-comp
  • ⚠️ L76 Role used instead of HTML tag prefer-tag-over-role

src/components/ui/item.tsx

  • ⚠️ L16 Role used instead of HTML tag prefer-tag-over-role

src/components/ui/label.tsx

  • ⚠️ L9 Label missing associated control label-has-associated-control

src/components/ui/native-select.tsx

  • ⚠️ L38 Multiple components in one file no-multi-comp
  • ⚠️ L51 Multiple components in one file no-multi-comp

src/components/ui/navigation-menu.tsx

  • ⚠️ L169 Non-component export in component file only-export-components

src/components/ui/pagination.tsx

  • ⚠️ L16 Redundant ARIA role no-redundant-roles
  • ⚠️ L55 Anchor has no content anchor-has-content

src/components/ui/resizable.tsx

  • ⚠️ L21 Multiple components in one file no-multi-comp

11 more warnings not shown.

Reviewed by React Doctor for commit 17abefc. See inline comments for fixes.

Comment thread src/components/ui/input-otp.tsx
Comment thread src/components/ui/input-otp.tsx
Comment thread src/components/ui/input-otp.tsx
Comment thread src/components/ui/input-otp.tsx
Comment thread src/components/ui/label.tsx
Comment thread src/components/ui/carousel.tsx
Comment thread src/components/ui/carousel.tsx
Comment thread src/components/ui/carousel.tsx
Comment thread src/components/ui/carousel.tsx
Comment thread src/components/ui/field.tsx
@socket-security

socket-security Bot commented Jun 12, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatedrecharts@​3.8.1 ⏵ 3.8.079 +11009994100
Updatedbetter-auth@​1.6.16 ⏵ 1.6.1798 +110085 +196 +1100

View full report

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

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/components/sidebar/nav-user.tsx`:
- Around line 25-34: The handleLogout function currently calls
authClient.signOut with only fetchOptions.onSuccess and always awaits then
navigates; update it to handle failures by either adding fetchOptions.onError to
authClient.signOut or wrapping the await in a try/catch: on error call
toast.error with a clear message (and do not call navigate) and optionally log
the error, and on success keep toast.success and navigate to "/sign-in";
reference handleLogout, authClient.signOut, fetchOptions.onError, toast.error,
toast.success and navigate when making the change.

In `@src/components/ui/alert-dialog.tsx`:
- Around line 168-172: The wrapper components (AlertDialogCancel, ComboboxClear,
ComboboxInput) currently pass render={...} before {...props}, allowing consumer
props to override the wrapper's render and in ComboboxInput to bypass the
wrapper's disabled wiring into InputGroupInput; fix this by reordering so you
spread {...props} first and then set the wrapper-owned render prop last (and
ensure the wrapper-owned disabled wiring for InputGroupInput is also applied
after spreading props) so the wrapper's render/disabled cannot be overridden by
consumer-supplied props.

In `@src/components/ui/alert.tsx`:
- Around line 28-32: The wrapper currently spreads {...props} after setting
role="alert" in the Alert component (see alertVariants and cn usage in
src/components/ui/alert.tsx), allowing consumers to override and remove the
built-in role; move the {...props} spread earlier (or explicitly reassign
role="alert" after spreading props) so role="alert" cannot be overridden by
incoming props and screen-reader semantics are preserved.

In `@src/components/ui/aspect-ratio.tsx`:
- Around line 12-17: The component currently spreads {...props} after supplying
an inline style with "--ratio", which allows a caller's style to overwrite and
drop the computed ratio; fix it by merging styles so the computed "--ratio" is
preserved—e.g., build the final style from props.style and then set the
"--ratio" key from the local ratio variable (or spread props without style and
pass a merged style object), updating the AspectRatio component in
aspect-ratio.tsx to use props.style merged with "--ratio" instead of letting
{...props} clobber it.

In `@src/components/ui/breadcrumb.tsx`:
- Around line 67-75: Breadcrumb components (e.g., BreadcrumbPage,
BreadcrumbSeparator, BreadcrumbEllipsis) currently forward {...props} after
fixed accessibility attributes which allows callers to override aria-current,
aria-disabled, role, and tabIndex; change the spreads so the forwarded props
cannot override those invariants by either spreading props first and then
explicitly setting aria-current, aria-disabled, role, and tabIndex (ensuring
fixed values win) or by omitting those keys from the forwarded props before
spreading (filter out "aria-current", "aria-disabled", "role", "tabIndex", and
any separator/ellipsis-related ARIA attributes), and keep the explicit
attributes (aria-current="page", aria-disabled="true", role="link" or
appropriate role, tabIndex={-1}) in BreadcrumbPage, BreadcrumbSeparator, and
BreadcrumbEllipsis to preserve accessibility semantics.

In `@src/components/ui/button-group.tsx`:
- Around line 31-37: The ButtonGroup JSX currently spreads {...props} after
fixed attributes so consumers can override role and data-* values; either move
{...props} before the fixed attributes (so role="group", data-orientation and
data-slot always win), or explicitly strip those keys from props before
spreading (e.g. extract role and any data-* props from the incoming props and
spread the remaining rest) in the ButtonGroup component where
buttonGroupVariants, className and props are used.

In `@src/components/ui/calendar.tsx`:
- Around line 206-233: The local ref created with useRef (ref) is never passed
into the rendered Button so ref.current?.focus() cannot focus the real element;
attach the ref to the Button by forwarding it into the component (pass ref={ref}
into <Button />) and ensure Button supports forwarded refs (if Button is a
custom component, update its implementation to accept and forward the ref to the
underlying button element using React.forwardRef); keep the existing
modifiers.focused useEffect logic as-is so focus handoff works.

In `@src/components/ui/carousel.tsx`:
- Around line 97-108: The effect registers both api.on("reInit", onSelect) and
api.on("select", onSelect) but only removes "select" in cleanup, leaving the
"reInit" listener dangling; update the React.useEffect cleanup to unsubscribe
both events (call api.off("reInit", onSelect) and api.off("select", onSelect))
and keep the initial onSelect(api) call and dependency array unchanged so
reInit/select listeners are properly removed on unmount or api swap.
- Around line 77-88: The keyboard handler handleKeyDown only handles
ArrowLeft/ArrowRight so vertical carousels (orientation === "vertical") lack
keyboard navigation; update handleKeyDown to branch on the component's
orientation prop (e.g., check orientation === "vertical") and, when vertical,
listen for "ArrowUp"/"ArrowDown" (calling scrollPrev()/scrollNext() and
event.preventDefault()), otherwise keep the existing "ArrowLeft"/"ArrowRight"
behavior; ensure the dependency array still includes scrollPrev and scrollNext
(and orientation if needed).

In `@src/components/ui/chart.tsx`:
- Around line 93-113: The current ChartStyle return builds raw HTML with
dangerouslySetInnerHTML using id, colorConfig keys and colors (and THEMES),
which can lead to CSS/HTML injection; replace this by not generating raw <style>
markup: either validate and whitelist id/series keys/colors before any
interpolation, or — preferred — stop using dangerouslySetInnerHTML in the
ChartStyle component and instead apply the theme variables directly to the chart
DOM node via safe React props/CSSOM (e.g., set CSS custom properties on the
element with data-chart={id} or update a stylesheet using document.styleSheets
API with properly escaped selectors), updating the logic that iterates THEMES
and colorConfig to assign only validated values to style properties rather than
embedding them in raw HTML.

In `@src/components/ui/context-menu.tsx`:
- Around line 150-159: ContextMenuSubContent currently passes {...props} after a
hardcoded className="shadow-lg", allowing a caller-supplied className in props
to overwrite the built-in elevation; update ContextMenuSubContent to merge the
incoming props.className with "shadow-lg" (using the project's class merging
utility or a simple join) and pass that merged value as the className to
ContextMenuContent instead of spreading props.last, preserving other props by
still spreading {...props} but without letting props.className override the
default.

In `@src/components/ui/field.tsx`:
- Line 196: Replace the loose equality check in the conditional that inspects
uniqueErrors?.length (the line with "if (uniqueErrors?.length == 1)") with a
strict equality operator, i.e. use "===" instead of "==", so the statement
becomes "if (uniqueErrors?.length === 1)"; update the same occurrence wherever
that exact conditional appears in the Field component or related function to
avoid type-coercion issues.

In `@src/components/ui/input-group.tsx`:
- Around line 53-58: The click handler in the InputGroup component only searches
for "input" elements so textarea-backed groups (InputGroupTextarea) won’t
receive focus; update the handler used in the onClick callback (the anonymous
function at the onClick where it does parentElement?.querySelector("input")) to
query for both inputs and textareas (e.g., "input, textarea") or otherwise
locate/input-or-textarea elements and call .focus() on the found element; apply
the same change to the other identical handler further down (the block around
lines 132-145) so addon clicks forward focus to InputGroupTextarea as well.

In `@src/components/ui/navigation-menu.tsx`:
- Around line 86-89: The Tailwind data-attribute value variants inside the
NavigationMenuPrimitive.Content className are using unsupported syntax
(data-ending-style:data-activation-direction=left/right and
data-starting-style:...), so update them to the bracketed value syntax used
elsewhere (e.g. data-[activation-direction=left]). In the className on
NavigationMenuPrimitive.Content replace each occurrence like
data-ending-style:data-activation-direction=left:translate-x-[50%],
data-ending-style:data-activation-direction=right:translate-x-[-50%],
data-starting-style:data-activation-direction=left:translate-x-[-50%], and
data-starting-style:data-activation-direction=right:translate-x-[50%] with
data-ending-style:data-[activation-direction=left]:translate-x-[50%],
data-ending-style:data-[activation-direction=right]:translate-x-[-50%],
data-starting-style:data-[activation-direction=left]:translate-x-[-50%], and
data-starting-style:data-[activation-direction=right]:translate-x-[50%]
respectively so Tailwind will generate the correct classes.

In `@src/components/ui/pagination.tsx`:
- Around line 109-119: The outer pagination ellipsis container currently has
aria-hidden which also hides the nested "More pages" sr-only label; remove
aria-hidden from the outer <span> (the element with
data-slot="pagination-ellipsis" and className) and instead mark the decorative
icon as hidden from AT (e.g., add aria-hidden={true} or role="img" with
aria-hidden on the IconDots SVG or wrapper) so the visible sr-only <span> "More
pages" remains reachable to screen readers while the icon stays ignored.

In `@src/components/ui/sidebar.tsx`:
- Around line 635-636: SidebarMenuSkeleton uses render-time randomness when
initializing const [width] = useState(() => `${Math.floor(Math.random() * 40) +
50}%`), which can cause SSR/CSR hydration mismatches; change this to a
deterministic width (e.g., fixed percentage or computed from props) or defer
randomness until after mount by initializing width to a stable value and setting
a random value inside a useEffect that runs only on the client (update the state
setter used in SidebarMenuSkeleton accordingly).
- Around line 82-89: Guard access to the Cookie Store API (cookieStore /
window.cookieStore) before calling cookieStore.set in the toggle/path that
writes the sidebar state, and when setting expiry use the correct field/type:
either pass maxAge: SIDEBAR_COOKIE_MAX_AGE (seconds) or compute expires:
Date.now() + SIDEBAR_COOKIE_MAX_AGE * 1000 (milliseconds) instead of passing the
seconds value directly; update references around SIDEBAR_COOKIE_NAME and
SIDEBAR_COOKIE_MAX_AGE where cookieStore.set is called. For SidebarMenuSkeleton,
remove Math.random() usage for inline --skeleton-width to avoid SSR hydration
mismatch—make widths deterministic (e.g., derive from a stable prop like index
or a preset sequence) or render the skeleton only on the client (client-only
wrapper) so server and client markup match. Ensure these changes touch
cookieStore usage and the SidebarMenuSkeleton component.

In `@src/components/ui/spinner.tsx`:
- Line 4: The files use React.ComponentProps/ComponentPropsWithRef in type
annotations but do not import the React types, causing type-check failures when
allowUmdGlobalAccess is off; add a type-only import such as import type * as
React from "react"; (or import type { ComponentProps, ComponentPropsWithRef }
from "react") at the top of src/components/ui/spinner.tsx and the other affected
files (refer to the Spinner function signature using React.ComponentProps<"svg">
and any usages of React.ComponentPropsWithRef in dropdown-menu and
navigation-menu) so the React namespace/types are available to the TypeScript
compiler.

In `@src/components/ui/toggle-group.tsx`:
- Around line 34-45: The CSS selectors in the ToggleGroup components don't match
the rendered attribute: you render data-orientation on ToggleGroupPrimitive but
the classes use data-vertical / group-data-vertical / group-data-horizontal, so
orientation-specific rules never apply; update the className strings in
ToggleGroup (where ToggleGroupPrimitive is used) and ToggleGroupItem to target
the actual attribute (e.g., use [data-orientation="vertical"] /
[data-orientation="horizontal"] or group/[data-orientation="vertical"] etc.)
instead of data-vertical/data-horizontal so the vertical/horizontal flex,
border, and rounding rules are applied correctly.
🪄 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: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: e58b5fba-0ef3-4f34-93a5-dea765a431c6

📥 Commits

Reviewing files that changed from the base of the PR and between 5151194 and 641a663.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (76)
  • .cta.json
  • .lintstagedrc.json
  • components.json
  • package.json
  • prisma.config.ts
  • src/components/form/form-checkbox.tsx
  • src/components/sidebar/app-sidebar.tsx
  • src/components/sidebar/nav-main.tsx
  • src/components/sidebar/nav-secondary.tsx
  • src/components/sidebar/nav-user.tsx
  • src/components/sidebar/user-avatar.tsx
  • src/components/ui/accordion.tsx
  • src/components/ui/alert-dialog.tsx
  • src/components/ui/alert.tsx
  • src/components/ui/aspect-ratio.tsx
  • src/components/ui/avatar.tsx
  • src/components/ui/badge.tsx
  • src/components/ui/breadcrumb.tsx
  • src/components/ui/button-group.tsx
  • src/components/ui/button.tsx
  • src/components/ui/calendar.tsx
  • src/components/ui/card.tsx
  • src/components/ui/carousel.tsx
  • src/components/ui/chart.tsx
  • src/components/ui/checkbox.tsx
  • src/components/ui/collapsible.tsx
  • src/components/ui/combobox.tsx
  • src/components/ui/command.tsx
  • src/components/ui/context-menu.tsx
  • src/components/ui/dialog.tsx
  • src/components/ui/direction.tsx
  • src/components/ui/drawer.tsx
  • src/components/ui/dropdown-menu.tsx
  • src/components/ui/empty.tsx
  • src/components/ui/field.tsx
  • src/components/ui/hover-card.tsx
  • src/components/ui/input-group.tsx
  • src/components/ui/input-otp.tsx
  • src/components/ui/input.tsx
  • src/components/ui/item.tsx
  • src/components/ui/kbd.tsx
  • src/components/ui/label.tsx
  • src/components/ui/menubar.tsx
  • src/components/ui/native-select.tsx
  • src/components/ui/navigation-menu.tsx
  • src/components/ui/pagination.tsx
  • src/components/ui/popover.tsx
  • src/components/ui/progress.tsx
  • src/components/ui/radio-group.tsx
  • src/components/ui/resizable.tsx
  • src/components/ui/scroll-area.tsx
  • src/components/ui/select.tsx
  • src/components/ui/separator.tsx
  • src/components/ui/sheet.tsx
  • src/components/ui/sidebar.tsx
  • src/components/ui/skeleton.tsx
  • src/components/ui/slider.tsx
  • src/components/ui/spinner.tsx
  • src/components/ui/switch.tsx
  • src/components/ui/table.tsx
  • src/components/ui/tabs.tsx
  • src/components/ui/textarea.tsx
  • src/components/ui/toggle-group.tsx
  • src/components/ui/toggle.tsx
  • src/components/ui/tooltip.tsx
  • src/features/auth/components/sign-up-form.tsx
  • src/features/auth/schema/index.ts
  • src/hooks/use-mobile.ts
  • src/integrations/root-provider.tsx
  • src/lib/db.ts
  • src/lib/utils.ts
  • src/middleware.ts
  • src/routes/__root.tsx
  • src/routes/api/auth/$.ts
  • src/styles.css
  • vite.config.ts
📜 Review details
🧰 Additional context used
📓 Path-based instructions (6)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx}: Use explicit types for function parameters and return values when they enhance clarity in TypeScript
Prefer unknown over any when the type is genuinely unknown in TypeScript
Use const assertions (as const) for immutable values and literal types in TypeScript
Leverage TypeScript's type narrowing instead of type assertions

Files:

  • src/components/ui/direction.tsx
  • src/components/ui/collapsible.tsx
  • src/features/auth/schema/index.ts
  • src/integrations/root-provider.tsx
  • src/components/sidebar/user-avatar.tsx
  • src/components/sidebar/nav-main.tsx
  • src/components/ui/checkbox.tsx
  • prisma.config.ts
  • src/components/ui/spinner.tsx
  • src/components/sidebar/nav-secondary.tsx
  • src/components/ui/aspect-ratio.tsx
  • src/routes/__root.tsx
  • src/components/ui/resizable.tsx
  • src/components/ui/hover-card.tsx
  • src/hooks/use-mobile.ts
  • src/components/ui/separator.tsx
  • src/components/ui/kbd.tsx
  • src/components/sidebar/app-sidebar.tsx
  • src/routes/api/auth/$.ts
  • vite.config.ts
  • src/components/ui/skeleton.tsx
  • src/components/sidebar/nav-user.tsx
  • src/components/ui/input-otp.tsx
  • src/components/ui/popover.tsx
  • src/features/auth/components/sign-up-form.tsx
  • src/components/ui/toggle-group.tsx
  • src/middleware.ts
  • src/components/ui/slider.tsx
  • src/components/form/form-checkbox.tsx
  • src/components/ui/label.tsx
  • src/components/ui/scroll-area.tsx
  • src/components/ui/dialog.tsx
  • src/components/ui/accordion.tsx
  • src/lib/db.ts
  • src/components/ui/tabs.tsx
  • src/components/ui/toggle.tsx
  • src/components/ui/avatar.tsx
  • src/components/ui/button.tsx
  • src/components/ui/progress.tsx
  • src/components/ui/tooltip.tsx
  • src/components/ui/card.tsx
  • src/components/ui/breadcrumb.tsx
  • src/components/ui/empty.tsx
  • src/components/ui/badge.tsx
  • src/components/ui/table.tsx
  • src/lib/utils.ts
  • src/components/ui/alert.tsx
  • src/components/ui/native-select.tsx
  • src/components/ui/input.tsx
  • src/components/ui/textarea.tsx
  • src/components/ui/button-group.tsx
  • src/components/ui/carousel.tsx
  • src/components/ui/radio-group.tsx
  • src/components/ui/pagination.tsx
  • src/components/ui/item.tsx
  • src/components/ui/input-group.tsx
  • src/components/ui/drawer.tsx
  • src/components/ui/command.tsx
  • src/components/ui/switch.tsx
  • src/components/ui/alert-dialog.tsx
  • src/components/ui/context-menu.tsx
  • src/components/ui/select.tsx
  • src/components/ui/chart.tsx
  • src/components/ui/menubar.tsx
  • src/components/ui/navigation-menu.tsx
  • src/components/ui/combobox.tsx
  • src/components/ui/calendar.tsx
  • src/components/ui/sheet.tsx
  • src/components/ui/field.tsx
  • src/components/ui/sidebar.tsx
  • src/components/ui/dropdown-menu.tsx
**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{js,jsx,ts,tsx}: Use meaningful variable names instead of magic numbers - extract constants with descriptive names
Use arrow functions for callbacks and short functions in JavaScript/TypeScript
Prefer for...of loops over .forEach() and indexed for loops in JavaScript/TypeScript
Use optional chaining (?.) and nullish coalescing (??) for safer property access in JavaScript/TypeScript
Prefer template literals over string concatenation in JavaScript/TypeScript
Use destructuring for object and array assignments in JavaScript/TypeScript
Use const by default, let only when reassignment is needed, never var in JavaScript/TypeScript
Always await promises in async functions - don't forget to use the return value
Use async/await syntax instead of promise chains for better readability in JavaScript/TypeScript
Handle errors appropriately in async code with try-catch blocks in JavaScript/TypeScript
Don't use async functions as Promise executors in JavaScript/TypeScript
Remove console.log, debugger, and alert statements from production code in JavaScript/TypeScript
Throw Error objects with descriptive messages, not strings or other values in JavaScript/TypeScript
Use try-catch blocks meaningfully - don't catch errors just to rethrow them in JavaScript/TypeScript
Prefer early returns over nested conditionals for error cases in JavaScript/TypeScript
Extract complex conditions into well-named boolean variables in JavaScript/TypeScript
Use early returns to reduce nesting in JavaScript/TypeScript
Prefer simple conditionals over nested ternary operators in JavaScript/TypeScript
Group related code together and separate concerns in JavaScript/TypeScript
Don't use eval() or assign directly to document.cookie in JavaScript/TypeScript
Validate and sanitize user input in JavaScript/TypeScript
Avoid spread syntax in accumulators within loops in JavaScript/TypeScript
Use top-level regex literals instead of creating them in loops in JavaScript/TypeScript
...

Files:

  • src/components/ui/direction.tsx
  • src/components/ui/collapsible.tsx
  • src/features/auth/schema/index.ts
  • src/integrations/root-provider.tsx
  • src/components/sidebar/user-avatar.tsx
  • src/components/sidebar/nav-main.tsx
  • src/components/ui/checkbox.tsx
  • prisma.config.ts
  • src/components/ui/spinner.tsx
  • src/components/sidebar/nav-secondary.tsx
  • src/components/ui/aspect-ratio.tsx
  • src/routes/__root.tsx
  • src/components/ui/resizable.tsx
  • src/components/ui/hover-card.tsx
  • src/hooks/use-mobile.ts
  • src/components/ui/separator.tsx
  • src/components/ui/kbd.tsx
  • src/components/sidebar/app-sidebar.tsx
  • src/routes/api/auth/$.ts
  • vite.config.ts
  • src/components/ui/skeleton.tsx
  • src/components/sidebar/nav-user.tsx
  • src/components/ui/input-otp.tsx
  • src/components/ui/popover.tsx
  • src/features/auth/components/sign-up-form.tsx
  • src/components/ui/toggle-group.tsx
  • src/middleware.ts
  • src/components/ui/slider.tsx
  • src/components/form/form-checkbox.tsx
  • src/components/ui/label.tsx
  • src/components/ui/scroll-area.tsx
  • src/components/ui/dialog.tsx
  • src/components/ui/accordion.tsx
  • src/lib/db.ts
  • src/components/ui/tabs.tsx
  • src/components/ui/toggle.tsx
  • src/components/ui/avatar.tsx
  • src/components/ui/button.tsx
  • src/components/ui/progress.tsx
  • src/components/ui/tooltip.tsx
  • src/components/ui/card.tsx
  • src/components/ui/breadcrumb.tsx
  • src/components/ui/empty.tsx
  • src/components/ui/badge.tsx
  • src/components/ui/table.tsx
  • src/lib/utils.ts
  • src/components/ui/alert.tsx
  • src/components/ui/native-select.tsx
  • src/components/ui/input.tsx
  • src/components/ui/textarea.tsx
  • src/components/ui/button-group.tsx
  • src/components/ui/carousel.tsx
  • src/components/ui/radio-group.tsx
  • src/components/ui/pagination.tsx
  • src/components/ui/item.tsx
  • src/components/ui/input-group.tsx
  • src/components/ui/drawer.tsx
  • src/components/ui/command.tsx
  • src/components/ui/switch.tsx
  • src/components/ui/alert-dialog.tsx
  • src/components/ui/context-menu.tsx
  • src/components/ui/select.tsx
  • src/components/ui/chart.tsx
  • src/components/ui/menubar.tsx
  • src/components/ui/navigation-menu.tsx
  • src/components/ui/combobox.tsx
  • src/components/ui/calendar.tsx
  • src/components/ui/sheet.tsx
  • src/components/ui/field.tsx
  • src/components/ui/sidebar.tsx
  • src/components/ui/dropdown-menu.tsx
**/*.{jsx,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{jsx,tsx}: Use function components over class components in React
Call hooks at the top level only, never conditionally in React
Specify all dependencies in hook dependency arrays correctly in React
Use the key prop for elements in iterables - prefer unique IDs over array indices in React
Nest children between opening and closing tags instead of passing as props in React
Don't define components inside other components in React
Use semantic HTML and ARIA attributes for accessibility: provide meaningful alt text for images, use proper heading hierarchy, add labels for form inputs, include keyboard event handlers alongside mouse events, use semantic elements instead of divs with roles in React
Avoid dangerouslySetInnerHTML unless absolutely necessary in React
Use proper image components (e.g., Next.js <Image>) over <img> tags in Next.js
Use Next.js <Image> component for images in Next.js
Use next/head or App Router metadata API for head elements in Next.js
Use Server Components for async data fetching instead of async Client Components in Next.js
Use ref as a prop instead of React.forwardRef in React 19+

Files:

  • src/components/ui/direction.tsx
  • src/components/ui/collapsible.tsx
  • src/integrations/root-provider.tsx
  • src/components/sidebar/user-avatar.tsx
  • src/components/sidebar/nav-main.tsx
  • src/components/ui/checkbox.tsx
  • src/components/ui/spinner.tsx
  • src/components/sidebar/nav-secondary.tsx
  • src/components/ui/aspect-ratio.tsx
  • src/routes/__root.tsx
  • src/components/ui/resizable.tsx
  • src/components/ui/hover-card.tsx
  • src/components/ui/separator.tsx
  • src/components/ui/kbd.tsx
  • src/components/sidebar/app-sidebar.tsx
  • src/components/ui/skeleton.tsx
  • src/components/sidebar/nav-user.tsx
  • src/components/ui/input-otp.tsx
  • src/components/ui/popover.tsx
  • src/features/auth/components/sign-up-form.tsx
  • src/components/ui/toggle-group.tsx
  • src/components/ui/slider.tsx
  • src/components/form/form-checkbox.tsx
  • src/components/ui/label.tsx
  • src/components/ui/scroll-area.tsx
  • src/components/ui/dialog.tsx
  • src/components/ui/accordion.tsx
  • src/components/ui/tabs.tsx
  • src/components/ui/toggle.tsx
  • src/components/ui/avatar.tsx
  • src/components/ui/button.tsx
  • src/components/ui/progress.tsx
  • src/components/ui/tooltip.tsx
  • src/components/ui/card.tsx
  • src/components/ui/breadcrumb.tsx
  • src/components/ui/empty.tsx
  • src/components/ui/badge.tsx
  • src/components/ui/table.tsx
  • src/components/ui/alert.tsx
  • src/components/ui/native-select.tsx
  • src/components/ui/input.tsx
  • src/components/ui/textarea.tsx
  • src/components/ui/button-group.tsx
  • src/components/ui/carousel.tsx
  • src/components/ui/radio-group.tsx
  • src/components/ui/pagination.tsx
  • src/components/ui/item.tsx
  • src/components/ui/input-group.tsx
  • src/components/ui/drawer.tsx
  • src/components/ui/command.tsx
  • src/components/ui/switch.tsx
  • src/components/ui/alert-dialog.tsx
  • src/components/ui/context-menu.tsx
  • src/components/ui/select.tsx
  • src/components/ui/chart.tsx
  • src/components/ui/menubar.tsx
  • src/components/ui/navigation-menu.tsx
  • src/components/ui/combobox.tsx
  • src/components/ui/calendar.tsx
  • src/components/ui/sheet.tsx
  • src/components/ui/field.tsx
  • src/components/ui/sidebar.tsx
  • src/components/ui/dropdown-menu.tsx
**/*.{jsx,tsx,html}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{jsx,tsx,html}: Add rel="noopener" when using target="_blank" on links in React/HTML
Consider accessibility, performance, and usability for user experience in React/HTML

Files:

  • src/components/ui/direction.tsx
  • src/components/ui/collapsible.tsx
  • src/integrations/root-provider.tsx
  • src/components/sidebar/user-avatar.tsx
  • src/components/sidebar/nav-main.tsx
  • src/components/ui/checkbox.tsx
  • src/components/ui/spinner.tsx
  • src/components/sidebar/nav-secondary.tsx
  • src/components/ui/aspect-ratio.tsx
  • src/routes/__root.tsx
  • src/components/ui/resizable.tsx
  • src/components/ui/hover-card.tsx
  • src/components/ui/separator.tsx
  • src/components/ui/kbd.tsx
  • src/components/sidebar/app-sidebar.tsx
  • src/components/ui/skeleton.tsx
  • src/components/sidebar/nav-user.tsx
  • src/components/ui/input-otp.tsx
  • src/components/ui/popover.tsx
  • src/features/auth/components/sign-up-form.tsx
  • src/components/ui/toggle-group.tsx
  • src/components/ui/slider.tsx
  • src/components/form/form-checkbox.tsx
  • src/components/ui/label.tsx
  • src/components/ui/scroll-area.tsx
  • src/components/ui/dialog.tsx
  • src/components/ui/accordion.tsx
  • src/components/ui/tabs.tsx
  • src/components/ui/toggle.tsx
  • src/components/ui/avatar.tsx
  • src/components/ui/button.tsx
  • src/components/ui/progress.tsx
  • src/components/ui/tooltip.tsx
  • src/components/ui/card.tsx
  • src/components/ui/breadcrumb.tsx
  • src/components/ui/empty.tsx
  • src/components/ui/badge.tsx
  • src/components/ui/table.tsx
  • src/components/ui/alert.tsx
  • src/components/ui/native-select.tsx
  • src/components/ui/input.tsx
  • src/components/ui/textarea.tsx
  • src/components/ui/button-group.tsx
  • src/components/ui/carousel.tsx
  • src/components/ui/radio-group.tsx
  • src/components/ui/pagination.tsx
  • src/components/ui/item.tsx
  • src/components/ui/input-group.tsx
  • src/components/ui/drawer.tsx
  • src/components/ui/command.tsx
  • src/components/ui/switch.tsx
  • src/components/ui/alert-dialog.tsx
  • src/components/ui/context-menu.tsx
  • src/components/ui/select.tsx
  • src/components/ui/chart.tsx
  • src/components/ui/menubar.tsx
  • src/components/ui/navigation-menu.tsx
  • src/components/ui/combobox.tsx
  • src/components/ui/calendar.tsx
  • src/components/ui/sheet.tsx
  • src/components/ui/field.tsx
  • src/components/ui/sidebar.tsx
  • src/components/ui/dropdown-menu.tsx
**/*.{jsx,tsx,vue,svelte}

📄 CodeRabbit inference engine (AGENTS.md)

Use class and for attributes instead of className and htmlFor in Solid/Svelte/Vue/Qwik

Files:

  • src/components/ui/direction.tsx
  • src/components/ui/collapsible.tsx
  • src/integrations/root-provider.tsx
  • src/components/sidebar/user-avatar.tsx
  • src/components/sidebar/nav-main.tsx
  • src/components/ui/checkbox.tsx
  • src/components/ui/spinner.tsx
  • src/components/sidebar/nav-secondary.tsx
  • src/components/ui/aspect-ratio.tsx
  • src/routes/__root.tsx
  • src/components/ui/resizable.tsx
  • src/components/ui/hover-card.tsx
  • src/components/ui/separator.tsx
  • src/components/ui/kbd.tsx
  • src/components/sidebar/app-sidebar.tsx
  • src/components/ui/skeleton.tsx
  • src/components/sidebar/nav-user.tsx
  • src/components/ui/input-otp.tsx
  • src/components/ui/popover.tsx
  • src/features/auth/components/sign-up-form.tsx
  • src/components/ui/toggle-group.tsx
  • src/components/ui/slider.tsx
  • src/components/form/form-checkbox.tsx
  • src/components/ui/label.tsx
  • src/components/ui/scroll-area.tsx
  • src/components/ui/dialog.tsx
  • src/components/ui/accordion.tsx
  • src/components/ui/tabs.tsx
  • src/components/ui/toggle.tsx
  • src/components/ui/avatar.tsx
  • src/components/ui/button.tsx
  • src/components/ui/progress.tsx
  • src/components/ui/tooltip.tsx
  • src/components/ui/card.tsx
  • src/components/ui/breadcrumb.tsx
  • src/components/ui/empty.tsx
  • src/components/ui/badge.tsx
  • src/components/ui/table.tsx
  • src/components/ui/alert.tsx
  • src/components/ui/native-select.tsx
  • src/components/ui/input.tsx
  • src/components/ui/textarea.tsx
  • src/components/ui/button-group.tsx
  • src/components/ui/carousel.tsx
  • src/components/ui/radio-group.tsx
  • src/components/ui/pagination.tsx
  • src/components/ui/item.tsx
  • src/components/ui/input-group.tsx
  • src/components/ui/drawer.tsx
  • src/components/ui/command.tsx
  • src/components/ui/switch.tsx
  • src/components/ui/alert-dialog.tsx
  • src/components/ui/context-menu.tsx
  • src/components/ui/select.tsx
  • src/components/ui/chart.tsx
  • src/components/ui/menubar.tsx
  • src/components/ui/navigation-menu.tsx
  • src/components/ui/combobox.tsx
  • src/components/ui/calendar.tsx
  • src/components/ui/sheet.tsx
  • src/components/ui/field.tsx
  • src/components/ui/sidebar.tsx
  • src/components/ui/dropdown-menu.tsx
**/index.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Avoid barrel files (index files that re-export everything) in JavaScript/TypeScript

Files:

  • src/features/auth/schema/index.ts
🪛 ast-grep (0.43.0)
src/components/ui/chart.tsx

[warning] 94-94: Usage of dangerouslySetInnerHTML detected. This bypasses React's built-in XSS protection. Always sanitize HTML content using libraries like DOMPurify before injecting it into the DOM to prevent XSS attacks.
Context: dangerouslySetInnerHTML
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation

(react-unsafe-html-injection)

🪛 OpenGrep (1.22.0)
src/components/ui/chart.tsx

[WARNING] 93-114: dangerouslySetInnerHTML with dynamic content can lead to XSS. Sanitize the input with a library like DOMPurify before rendering.

(coderabbit.xss.react-dangerously-set-innerhtml)

🔇 Additional comments (37)
.cta.json (1)

28-28: LGTM!

.lintstagedrc.json (1)

2-2: LGTM!

components.json (1)

22-23: LGTM!

prisma.config.ts (1)

4-11: LGTM!

src/lib/db.ts (1)

6-6: LGTM!

Also applies to: 10-10, 16-16

src/lib/utils.ts (1)

24-24: LGTM!

src/styles.css (1)

9-48: LGTM!

Also applies to: 52-83, 87-117, 121-134

vite.config.ts (1)

9-16: LGTM!

src/hooks/use-mobile.ts (1)

6-21: LGTM!

src/integrations/root-provider.tsx (1)

3-9: LGTM!

src/features/auth/schema/index.ts (1)

6-25: LGTM!

src/components/sidebar/nav-main.tsx (1)

6-8: LGTM!

src/middleware.ts (1)

6-13: Auth redirect already preserves destination; src/middleware.ts authMiddleware isn’t currently wired

  • / _app’s beforeLoad redirects unauthenticated users to /sign-in with search: { redirect: location.pathname }, and the sign-in/sign-up forms use search.redirect for the post-auth navigation.

  • src/middleware.ts still redirects to /sign-in without search.redirect, but authMiddleware isn’t connected via TanStack Start config here (no createStart/requestMiddleware, no src/start.ts), so it shouldn’t affect the current flow unless wired later.

      		> Likely an incorrect or invalid review comment.
    
src/components/form/form-checkbox.tsx (1)

9-23: LGTM!

src/components/ui/direction.tsx (1)

1-6: LGTM!

src/components/ui/field.tsx (1)

1-52: LGTM!

Also applies to: 53-85, 86-143, 144-173, 174-182, 210-237

src/components/ui/label.tsx (1)

1-20: LGTM!

src/components/ui/radio-group.tsx (1)

1-36: LGTM!

src/components/ui/skeleton.tsx (1)

1-13: LGTM!

src/components/ui/collapsible.tsx (1)

1-27: LGTM!

src/components/ui/checkbox.tsx (1)

1-27: LGTM!

src/components/ui/button.tsx (1)

43-54: LGTM!

src/components/ui/progress.tsx (1)

7-24: LGTM!

Also applies to: 28-73

src/components/ui/sheet.tsx (1)

38-76: LGTM!

src/components/ui/switch.tsx (1)

5-26: LGTM!

src/components/ui/drawer.tsx (1)

1-5: Check client boundary safety for vaul Drawer wrapper

Searches across src didn’t find any direct import specifiers referencing src/components/ui/drawer.tsx (or paths containing drawer) from other ts/tsx files, so there are no obvious server-side importers by path. However, if this wrapper is pulled in indirectly via barrel/re-export files, the importers may not mention the drawer path—so keep every consumer behind a client boundary (or restore "use client" in this file).

src/components/ui/badge.tsx (1)

7-50: LGTM!

src/components/ui/empty.tsx (1)

5-107: LGTM!

src/components/ui/item.tsx (1)

8-199: LGTM!

src/components/ui/separator.tsx (1)

1-25: LGTM!

src/components/ui/tabs.tsx (1)

6-80: LGTM!

src/components/ui/scroll-area.tsx (1)

1-52: LGTM!

src/components/ui/slider.tsx (1)

5-55: LGTM!

src/components/ui/input-group.tsx (1)

1-7: Add "use client" to src/components/ui/input-group.tsx if this module is used from React Server Components.

InputGroupAddon defines an inline onClick handler (around line 53) but the module header has no "use client" directive (lines 1-7), which is required for client-side event handlers in an RSC setup.

Suggested fix
+"use client";
+
 import { cva, type VariantProps } from "class-variance-authority";
 import type * as React from "react";
 import { Button } from "`#/components/ui/button.tsx`";
 import { Input } from "`#/components/ui/input.tsx`";
 import { Textarea } from "`#/components/ui/textarea.tsx`";
 import { cn } from "`#/lib/utils.ts`";
src/components/ui/toggle.tsx (1)

8-45: LGTM!

src/components/ui/input-otp.tsx (1)

6-84: LGTM!

src/components/ui/resizable.tsx (1)

5-48: LGTM!

Comment thread src/components/sidebar/nav-user.tsx
Comment thread src/components/ui/alert-dialog.tsx
Comment thread src/components/ui/alert.tsx
Comment thread src/components/ui/aspect-ratio.tsx
Comment thread src/components/ui/breadcrumb.tsx
Comment thread src/components/ui/pagination.tsx
Comment thread src/components/ui/sidebar.tsx
Comment thread src/components/ui/sidebar.tsx
Comment thread src/components/ui/spinner.tsx
Comment thread src/components/ui/toggle-group.tsx
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Comment thread src/components/ui/field.tsx
Comment thread src/components/ui/field.tsx
Comment thread src/components/ui/field.tsx
Comment thread src/components/ui/field.tsx
Comment thread src/components/ui/badge.tsx
Comment thread src/components/ui/hover-card.tsx
Comment thread src/components/ui/item.tsx
Comment thread src/components/ui/sidebar.tsx
Comment thread src/components/ui/sidebar.tsx
Comment thread src/components/ui/sidebar.tsx
@agabaarnold agabaarnold merged commit 8d9e192 into main Jun 12, 2026
5 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant