Skip to content

Commit 5d3e0fa

Browse files
committed
Merge remote-tracking branch 'origin/master' into chore/bump-deps-2026-05-31
2 parents bb4b4ba + 8bd9776 commit 5d3e0fa

14 files changed

Lines changed: 80 additions & 23 deletions

packages/app/src/app/blog/[slug]/og-image-render.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ export async function renderOgImage(meta: BlogPostMeta) {
102102
<img
103103
key={i}
104104
src={tile.src}
105+
alt=""
105106
style={{
106107
position: 'absolute',
107108
left: 12 + col * 90,
@@ -180,7 +181,7 @@ export async function renderOgImage(meta: BlogPostMeta) {
180181
timeZone: 'UTC',
181182
})}
182183
</span>
183-
<img src={logoSrc} height={80} />
184+
<img src={logoSrc} height={80} alt="SemiAnalysis" />
184185
</div>
185186
</div>
186187
</div>,

packages/app/src/app/error.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export default function Error({
2121
<p className="text-lg mb-4">An unexpected error has occurred.</p>
2222
<p className="text-md text-red-500 mb-8">{error.message}</p>
2323
<button
24+
type="button"
2425
className="px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90"
2526
onClick={() => {
2627
track('error_page_retry');

packages/app/src/components/inference/replay/ReplayPanel.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,7 @@ export default function ReplayPanel({
604604
>
605605
<span className="flex-1">MP4 export failed: {exportError}</span>
606606
<button
607+
type="button"
607608
onClick={() => setExportError(null)}
608609
className="text-destructive/70 hover:text-destructive cursor-pointer"
609610
aria-label="Dismiss"

packages/app/src/components/inference/ui/ChartDisplay.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ function E2eXAxisDropdown({
7676
<Popover open={open} onOpenChange={setOpen}>
7777
<PopoverTrigger asChild>
7878
<button
79+
type="button"
7980
className="inline-flex items-center gap-1 hover:opacity-70 transition-opacity cursor-pointer"
8081
onClick={(e) => e.stopPropagation()}
8182
>
@@ -86,6 +87,7 @@ function E2eXAxisDropdown({
8687
<PopoverContent className="w-48 p-1" align="start">
8788
{xAxisOptions.map((opt) => (
8889
<button
90+
type="button"
8991
key={opt.label}
9092
className={`w-full text-left px-3 py-1.5 text-sm rounded hover:bg-accent transition-colors ${
9193
(opt.value === null && !selectedValue) || opt.value === selectedValue
@@ -680,6 +682,7 @@ export default function ChartDisplay() {
680682
/>
681683
{config.label}
682684
<button
685+
type="button"
683686
className="ml-1 hover:opacity-70"
684687
onClick={() => {
685688
removeTrackedConfig(config.id);

packages/app/src/components/submissions/SubmissionsTable.tsx

Lines changed: 48 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,34 @@ function getModelDisplayName(dbModel: string): string {
7171
return dbModel;
7272
}
7373

74+
function SortHeader({
75+
label,
76+
field,
77+
sortKey,
78+
sortDir,
79+
onSort,
80+
}: {
81+
label: string;
82+
field: SortKey;
83+
sortKey: SortKey;
84+
sortDir: SortDir;
85+
onSort: (field: SortKey) => void;
86+
}) {
87+
return (
88+
<th
89+
className="px-3 py-2 text-left text-xs font-medium text-muted-foreground cursor-pointer hover:text-foreground select-none"
90+
onClick={() => onSort(field)}
91+
>
92+
<span className="flex items-center gap-1">
93+
{label}
94+
{sortKey === field && (
95+
<span className="text-foreground">{sortDir === 'asc' ? '↑' : '↓'}</span>
96+
)}
97+
</span>
98+
</th>
99+
);
100+
}
101+
74102
export default function SubmissionsTable({ data }: SubmissionsTableProps) {
75103
const [sortKey, setSortKey] = useState<SortKey>('date');
76104
const [sortDir, setSortDir] = useState<SortDir>('desc');
@@ -147,20 +175,6 @@ export default function SubmissionsTable({ data }: SubmissionsTableProps) {
147175
});
148176
}, []);
149177

150-
const SortHeader = ({ label, field }: { label: string; field: SortKey }) => (
151-
<th
152-
className="px-3 py-2 text-left text-xs font-medium text-muted-foreground cursor-pointer hover:text-foreground select-none"
153-
onClick={() => handleSort(field)}
154-
>
155-
<span className="flex items-center gap-1">
156-
{label}
157-
{sortKey === field && (
158-
<span className="text-foreground">{sortDir === 'asc' ? '↑' : '↓'}</span>
159-
)}
160-
</span>
161-
</th>
162-
);
163-
164178
return (
165179
<div className="flex flex-col gap-3">
166180
<input
@@ -178,13 +192,26 @@ export default function SubmissionsTable({ data }: SubmissionsTableProps) {
178192
<thead className="bg-muted/50">
179193
<tr>
180194
<th className="w-8 px-2" />
181-
<SortHeader label="GPU" field="hardware" />
182-
<SortHeader label="Model" field="model" />
183-
<SortHeader label="Precision" field="precision" />
184-
<SortHeader label="Spec Method" field="spec_method" />
185-
<SortHeader label="Framework" field="framework" />
186-
<SortHeader label="Date" field="date" />
187-
<SortHeader label="Datapoints" field="total_datapoints" />
195+
{(
196+
[
197+
['GPU', 'hardware'],
198+
['Model', 'model'],
199+
['Precision', 'precision'],
200+
['Spec Method', 'spec_method'],
201+
['Framework', 'framework'],
202+
['Date', 'date'],
203+
['Datapoints', 'total_datapoints'],
204+
] as [string, SortKey][]
205+
).map(([label, field]) => (
206+
<SortHeader
207+
key={field}
208+
label={label}
209+
field={field}
210+
sortKey={sortKey}
211+
sortDir={sortDir}
212+
onSort={handleSort}
213+
/>
214+
))}
188215
<th
189216
className="px-3 py-2 text-left text-xs font-medium text-muted-foreground select-none"
190217
scope="col"

packages/app/src/components/ui/bottom-toast.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ export function BottomToast({
7777
>
7878
<div className="relative flex items-start gap-3 rounded-lg border border-border bg-card p-4 shadow-lg">
7979
<button
80+
type="button"
8081
onClick={dismiss}
8182
className="absolute top-2 right-2 text-muted-foreground hover:text-foreground transition-colors"
8283
aria-label="Dismiss"
@@ -91,6 +92,7 @@ export function BottomToast({
9192
<p className="text-xs text-muted-foreground">{description}</p>
9293
{action && (
9394
<button
95+
type="button"
9496
onClick={handleAction}
9597
className="flex items-center gap-1.5 self-end px-3 py-1.5 rounded-md text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors"
9698
>

packages/app/src/components/ui/calendar-picker-utils.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ export function CalendarMonthPanel({
280280

281281
return (
282282
<button
283+
type="button"
283284
key={formatCalendarDate(day)}
284285
onClick={() => !disabled && !isDisabled && onDateClick(day)}
285286
onMouseEnter={() => !isDisabled && onDateHover?.(day)}

packages/app/src/components/ui/chart-buttons.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ export function ChartButtons({
110110
</PopoverTrigger>
111111
<PopoverContent align="end" className="w-44 p-1">
112112
<button
113+
type="button"
113114
data-testid="export-png-button"
114115
data-ph-capture-attribute-export-type="png"
115116
data-ph-capture-attribute-chart={chartId}
@@ -122,6 +123,7 @@ export function ChartButtons({
122123
</button>
123124
{onExportCsv && (
124125
<button
126+
type="button"
125127
data-testid="export-csv-button"
126128
data-ph-capture-attribute-export-type="csv"
127129
data-ph-capture-attribute-chart={chartId}
@@ -134,6 +136,7 @@ export function ChartButtons({
134136
)}
135137
{onExportMp4 && (
136138
<button
139+
type="button"
137140
data-testid="export-mp4-button"
138141
data-ph-capture-attribute-export-type="mp4"
139142
data-ph-capture-attribute-chart={chartId}

packages/app/src/components/ui/chart-legend.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ export default function ChartLegend({
237237
/>
238238
{searchQuery && (
239239
<button
240+
type="button"
240241
onClick={() => {
241242
track('inference_legend_search_cleared');
242243
setSearchQuery('');
@@ -283,6 +284,7 @@ export default function ChartLegend({
283284
<div className="w-full no-export flex flex-wrap gap-x-3 gap-y-1">
284285
{actions.map((action) => (
285286
<button
287+
type="button"
286288
key={action.id}
287289
data-testid={action.id}
288290
onClick={action.onClick}
@@ -318,6 +320,7 @@ export default function ChartLegend({
318320
const expandButton = hasLongText ? (
319321
<div className="hidden lg:block mt-2 no-export">
320322
<button
323+
type="button"
321324
onClick={handleLegendExpand}
322325
className="text-xs text-accent-foreground hover:text-foreground flex items-center gap-1"
323326
aria-label={isLegendExpanded ? 'Collapse legend' : 'Expand legend'}

packages/app/src/components/ui/data-table.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ export function DataTable<T>({
160160
/>
161161
{search && (
162162
<button
163+
type="button"
163164
onClick={() => {
164165
setSearch('');
165166
setPage(0);
@@ -286,6 +287,7 @@ export function DataTable<T>({
286287
</div>
287288
<div className="flex items-center gap-1">
288289
<button
290+
type="button"
289291
onClick={() => {
290292
setPage((p) => Math.max(0, p - 1));
291293
track(`${analyticsPrefix}_page_changed`, { direction: 'prev' });
@@ -300,6 +302,7 @@ export function DataTable<T>({
300302
{safePage + 1} / {totalPages}
301303
</span>
302304
<button
305+
type="button"
303306
onClick={() => {
304307
setPage((p) => Math.min(totalPages - 1, p + 1));
305308
track(`${analyticsPrefix}_page_changed`, { direction: 'next' });

0 commit comments

Comments
 (0)