Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions packages/ui/src/styles/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,80 @@
}
}

button:not(:disabled):not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
),
a[href]:not([disabled]):not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
),
input[type="button"]:not(:disabled):not([aria-disabled="true"]):not(
[data-disabled]
):not([data-disabled="true"]),
input[type="checkbox"]:not(:disabled):not([aria-disabled="true"]):not(
[data-disabled]
):not([data-disabled="true"]),
input[type="radio"]:not(:disabled):not([aria-disabled="true"]):not(
[data-disabled]
):not([data-disabled="true"]),
input[type="reset"]:not(:disabled):not([aria-disabled="true"]):not(
[data-disabled]
):not([data-disabled="true"]),
input[type="submit"]:not(:disabled):not([aria-disabled="true"]):not(
[data-disabled]
):not([data-disabled="true"]),
label[for]:not([disabled]):not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
),
summary:not([disabled]):not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
),
[role="button"]:not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
),
[role="checkbox"]:not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
),
[role="menuitem"]:not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
),
[role="menuitemcheckbox"]:not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
),
[role="menuitemradio"]:not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
),
[role="option"]:not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
),
Comment on lines +217 to +228
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.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify that DropdownMenuItem and SelectItem receive role="menuitem" / role="option" from Radix primitives.
rg -n "role=" --type=tsx -C 2 "dropdown-menu|select" packages/ui/src/components/ 2>/dev/null || \
rg -rn "role=" -C 2 packages/ui/src/components/

Repository: stylessh/diffkit

Length of output: 1830


🏁 Script executed:

fd -type f -name "*dropdown*" packages/ui/src/components/

Repository: stylessh/diffkit

Length of output: 231


🏁 Script executed:

fd -type f -name "*select*" packages/ui/src/components/

Repository: stylessh/diffkit

Length of output: 231


🏁 Script executed:

sed -n '180,230p' packages/ui/src/styles/globals.css

Repository: stylessh/diffkit

Length of output: 1819


🏁 Script executed:

find packages/ui/src/components -name "*dropdown*" -o -name "*select*"

Repository: stylessh/diffkit

Length of output: 143


🏁 Script executed:

cat packages/ui/src/components/dropdown-menu.tsx

Repository: stylessh/diffkit

Length of output: 8099


🏁 Script executed:

cat packages/ui/src/components/select.tsx

Repository: stylessh/diffkit

Length of output: 5741


[role="menuitem"] and [role="option"] will silently override cursor-default on DropdownMenuItem and SelectItem.

The entire cursor rule block (lines 184–248) sits outside any @layer, giving it higher cascade priority than Tailwind's @layer utilities. Radix UI automatically renders DropdownMenu.Item with role="menuitem" and Select.Item with role="option". Both components deliberately use cursor-default in their className, but that Tailwind utility will be overridden by these unlayered selectors, silently changing every enabled menu/select item from cursor: default to cursor: pointer.

Either remove cursor-default from DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuSubTrigger, and SelectItem to make the intent explicit, or remove [role="menuitem"] and [role="option"] from this selector list (and move the rule inside @layer base if relying on component-level classes alone).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/ui/src/styles/globals.css` around lines 217 - 228, The global
selector list including [role="menuitem"] and [role="option"] is outside any
`@layer` and is overriding Tailwind's cursor-default utility on Radix components;
fix by either removing cursor-default from the component classNames on
DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem,
DropdownMenuSubTrigger, and SelectItem so the intent is explicit, or remove
[role="menuitem"] and [role="option"] from the selector list and move this
cursor rule into an appropriate `@layer` (e.g., `@layer` base) so it doesn't trump
Tailwind utilities.

[role="radio"]:not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
),
[role="switch"]:not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
),
[role="tab"]:not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
),
[data-slot$="-trigger"]:not(:disabled):not([aria-disabled="true"]):not(
[data-disabled]
):not([data-disabled="true"]),
[data-slot="checkbox"]:not(:disabled):not([aria-disabled="true"]):not(
[data-disabled]
):not([data-disabled="true"]),
[data-slot="command-item"]:not([aria-disabled="true"]):not([data-disabled]):not(
[data-disabled="true"]
) {
cursor: pointer;
}

button:disabled,
[disabled],
[aria-disabled="true"],
[data-disabled],
[data-disabled="true"] {
cursor: not-allowed;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.

/* Custom scrollbar — thumb only, no track, overlays content */
* {
scrollbar-width: thin;
Expand Down
Loading