From c3630a8c74ac15b5ed87e37494dfacbd912a6761 Mon Sep 17 00:00:00 2001 From: gregortokarev Date: Fri, 1 May 2026 18:21:54 +0300 Subject: [PATCH 1/3] feat: add cursor-pointer rule for all clickable elements --- packages/ui/src/styles/globals.css | 68 ++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/packages/ui/src/styles/globals.css b/packages/ui/src/styles/globals.css index ca0570e..c95afc2 100644 --- a/packages/ui/src/styles/globals.css +++ b/packages/ui/src/styles/globals.css @@ -181,6 +181,74 @@ } } +button:not(:disabled):not([aria-disabled="true"]):not([data-disabled]):not( + [data-disabled="true"] + ), +a[href], +input[type="button"]:not(:disabled):not([aria-disabled="true"]):not( + [data-disabled="true"] + ), +input[type="checkbox"]:not(:disabled):not([aria-disabled="true"]):not( + [data-disabled="true"] + ), +input[type="radio"]:not(:disabled):not([aria-disabled="true"]):not( + [data-disabled="true"] + ), +input[type="reset"]:not(:disabled):not([aria-disabled="true"]):not( + [data-disabled="true"] + ), +input[type="submit"]:not(:disabled):not([aria-disabled="true"]):not( + [data-disabled="true"] + ), +label[for], +summary, +[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"] + ), +[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; +} + /* Custom scrollbar — thumb only, no track, overlays content */ * { scrollbar-width: thin; From 2f54a0a116157e867ee42731a4be38d0f7517ece Mon Sep 17 00:00:00 2001 From: gregortokarev Date: Fri, 1 May 2026 19:33:16 +0300 Subject: [PATCH 2/3] feat: add cmd+enter submissions --- .../src/components/compare/compare-form.tsx | 7 +++++++ .../components/details/comment-reply-form.tsx | 4 ++++ .../src/components/details/detail-activity.tsx | 4 ++++ .../components/issues/new/new-issue-page.tsx | 11 +++++++++++ .../pulls/detail/pull-body-section.tsx | 4 ++++ .../pulls/detail/pull-detail-activity.tsx | 18 ++++++++++++++++++ .../pulls/review/review-file-diff-block.tsx | 12 ++++++++++++ .../pulls/review/review-submit-popover.tsx | 7 +++++++ packages/ui/src/components/markdown-editor.tsx | 12 +++++++++++- 9 files changed, 78 insertions(+), 1 deletion(-) diff --git a/apps/dashboard/src/components/compare/compare-form.tsx b/apps/dashboard/src/components/compare/compare-form.tsx index fb09269..5b84891 100644 --- a/apps/dashboard/src/components/compare/compare-form.tsx +++ b/apps/dashboard/src/components/compare/compare-form.tsx @@ -66,6 +66,12 @@ export function CompareForm({ ref={titleRef} value={title} onChange={(e) => onTitleChange(e.target.value)} + onKeyDown={(event) => { + if ((event.metaKey || event.ctrlKey) && event.key === "Enter") { + event.preventDefault(); + handleExecute(); + } + }} placeholder="Pull request title" // biome-ignore lint/a11y/noAutofocus: intentional — this is a dedicated PR-creation page autoFocus @@ -80,6 +86,7 @@ export function CompareForm({ onChange={onBodyChange} placeholder="Describe the changes…" mentions={mentionConfig} + onModEnter={handleExecute} /> diff --git a/apps/dashboard/src/components/details/comment-reply-form.tsx b/apps/dashboard/src/components/details/comment-reply-form.tsx index 4146ac7..fa9ef44 100644 --- a/apps/dashboard/src/components/details/comment-reply-form.tsx +++ b/apps/dashboard/src/components/details/comment-reply-form.tsx @@ -99,6 +99,10 @@ export function CommentReplyForm({ compact media={mediaUpload} onPaste={onMediaPaste} + onModEnter={() => { + if (!value.trim() || isSending || hasPendingUploads) return; + void handleSend(); + }} />
{ + if (!value.trim() || isSending || hasPendingUploads) return; + void handleSend(); + }} mentions={{ candidates: mentionCandidates, onActivate: () => setMentionActivated(true), diff --git a/apps/dashboard/src/components/issues/new/new-issue-page.tsx b/apps/dashboard/src/components/issues/new/new-issue-page.tsx index dfc3a56..9a8e5fa 100644 --- a/apps/dashboard/src/components/issues/new/new-issue-page.tsx +++ b/apps/dashboard/src/components/issues/new/new-issue-page.tsx @@ -209,6 +209,13 @@ function NewIssueForm({ id="issue-title" value={title} onChange={(e) => setTitle(e.target.value)} + onKeyDown={(e) => { + if ((e.metaKey || e.ctrlKey) && e.key === "Enter") { + e.preventDefault(); + if (!canSubmit) return; + void handleSubmit(); + } + }} placeholder="Issue title" className="flex h-9 w-full rounded-md border bg-surface-1 px-3 py-1 text-sm outline-none transition-[box-shadow,border-color] placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]" /> @@ -224,6 +231,10 @@ function NewIssueForm({ onChange={setBody} placeholder="Describe the issue..." mentions={mentionConfig} + onModEnter={() => { + if (!canSubmit) return; + void handleSubmit(); + }} />
diff --git a/apps/dashboard/src/components/pulls/detail/pull-body-section.tsx b/apps/dashboard/src/components/pulls/detail/pull-body-section.tsx index 2e1862e..b87934f 100644 --- a/apps/dashboard/src/components/pulls/detail/pull-body-section.tsx +++ b/apps/dashboard/src/components/pulls/detail/pull-body-section.tsx @@ -89,6 +89,10 @@ export function PullBodySection({ value={draft} onChange={setDraft} placeholder="Write a description..." + onModEnter={() => { + if (isSaving) return; + void saveBody(); + }} />
@@ -1533,6 +1540,13 @@ function MergeFooter({ id="merge-commit-desc" value={commitDescription} onChange={(e) => setCommitDescription(e.target.value)} + onKeyDown={(event) => { + if ((event.metaKey || event.ctrlKey) && event.key === "Enter") { + event.preventDefault(); + if (isDisabled || !commitTitle.trim()) return; + void handleMerge(); + } + }} placeholder="Add an optional extended description..." rows={3} className="flex w-full rounded-md border bg-transparent px-3 py-2 text-sm shadow-sm transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring resize-none" @@ -2974,6 +2988,10 @@ function ReviewCommentBlock({ onChange={setReplyBody} placeholder="Write a reply..." compact + onModEnter={() => { + if (!replyBody.trim() || isSending) return; + void handleReply(); + }} />