diff --git a/apps/learn/components/side-navigation-item.tsx b/apps/learn/components/side-navigation-item.tsx index 664a822759bf3..0961fd40c7a8c 100644 --- a/apps/learn/components/side-navigation-item.tsx +++ b/apps/learn/components/side-navigation-item.tsx @@ -93,6 +93,8 @@ const NavigationItem: React.FC = ({ {hasChildren ? ( <> diff --git a/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx b/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx index 7a03d13ea76d8..5453e536903fe 100644 --- a/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx +++ b/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx @@ -251,6 +251,7 @@ const FeaturePreviewItem = ({ return ( )} diff --git a/apps/studio/components/interfaces/Database/Roles/RoleRow.tsx b/apps/studio/components/interfaces/Database/Roles/RoleRow.tsx index 68f082b276c18..21937060ab057 100644 --- a/apps/studio/components/interfaces/Database/Roles/RoleRow.tsx +++ b/apps/studio/components/interfaces/Database/Roles/RoleRow.tsx @@ -117,6 +117,7 @@ export const RoleRow = ({ role, disabled = false, onSelectDelete }: RoleRowProps
+ )}
diff --git a/apps/studio/components/interfaces/QueryInsights/QueryInsightsChart/QueryInsightsChart.tsx b/apps/studio/components/interfaces/QueryInsights/QueryInsightsChart/QueryInsightsChart.tsx index ef6267c18b2db..b2e4d3e18f72f 100644 --- a/apps/studio/components/interfaces/QueryInsights/QueryInsightsChart/QueryInsightsChart.tsx +++ b/apps/studio/components/interfaces/QueryInsights/QueryInsightsChart/QueryInsightsChart.tsx @@ -103,6 +103,7 @@ export const QueryInsightsChart = ({ + + ))} , etc. diff --git a/apps/studio/components/interfaces/Storage/BucketFilePickerDialog/BucketFilePickerHeader.tsx b/apps/studio/components/interfaces/Storage/BucketFilePickerDialog/BucketFilePickerHeader.tsx index a172e4309cc0f..0f077cd4aa570 100644 --- a/apps/studio/components/interfaces/Storage/BucketFilePickerDialog/BucketFilePickerHeader.tsx +++ b/apps/studio/components/interfaces/Storage/BucketFilePickerDialog/BucketFilePickerHeader.tsx @@ -97,6 +97,7 @@ const HeaderBreadcrumbs = ({ ) : ( + + diff --git a/apps/studio/components/interfaces/Storage/StoragePolicies/StoragePolicyEditorModalTitle.tsx b/apps/studio/components/interfaces/Storage/StoragePolicies/StoragePolicyEditorModalTitle.tsx index 7138302232b0a..8f837ab6c383d 100644 --- a/apps/studio/components/interfaces/Storage/StoragePolicies/StoragePolicyEditorModalTitle.tsx +++ b/apps/studio/components/interfaces/Storage/StoragePolicies/StoragePolicyEditorModalTitle.tsx @@ -29,6 +29,7 @@ export const StoragePolicyEditorModalTitle = ({
) @@ -229,14 +240,12 @@ export function AttachmentUploadDisplay({ >
) @@ -245,9 +254,12 @@ export function AttachmentUploadDisplay({ {!isFull && (
{!hasImportContent && (
-
diff --git a/apps/studio/components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout.tsx b/apps/studio/components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout.tsx index f32b32e2cb756..ff75219096fae 100644 --- a/apps/studio/components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout.tsx +++ b/apps/studio/components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout.tsx @@ -313,7 +313,7 @@ const EdgeFunctionDetailsLayout = ({ onOpenChange={setIsTimestampHoverCardOpen} > - + ) : disabled ? ( + + {content} + ) : ( onTopLevelClick(route)} disabled={route.disabled} @@ -48,14 +49,20 @@ export function TopLevelRouteItem({ {content} ) : route.link ? ( - - {content} - + route.disabled ? ( + + {content} + + ) : ( + + {content} + + ) ) : ( {content} diff --git a/apps/studio/components/layouts/TableEditorLayout/EntityListItem.tsx b/apps/studio/components/layouts/TableEditorLayout/EntityListItem.tsx index 82b246ec302a1..eeffd9a142f79 100644 --- a/apps/studio/components/layouts/TableEditorLayout/EntityListItem.tsx +++ b/apps/studio/components/layouts/TableEditorLayout/EntityListItem.tsx @@ -184,6 +184,7 @@ export const EntityListItem = ({ id={String(entity.id)} href={buildTableEditorUrl({ projectRef, tableId: entity.id, schema: entity.schema })} role="button" + tabIndex={0} aria-label={`View ${entity.name}`} className={cn( TreeViewItemVariant({ diff --git a/apps/studio/components/layouts/Tabs/CollapseButton.tsx b/apps/studio/components/layouts/Tabs/CollapseButton.tsx index 09ccf98755450..89aafc488f023 100644 --- a/apps/studio/components/layouts/Tabs/CollapseButton.tsx +++ b/apps/studio/components/layouts/Tabs/CollapseButton.tsx @@ -20,6 +20,7 @@ export function CollapseButton({ hideTabs }: { hideTabs: boolean }) { . diff --git a/apps/studio/components/ui/SingleStat.tsx b/apps/studio/components/ui/SingleStat.tsx index 0cc07c2a2c15f..3feae911a6bbf 100644 --- a/apps/studio/components/ui/SingleStat.tsx +++ b/apps/studio/components/ui/SingleStat.tsx @@ -59,7 +59,7 @@ export const SingleStat = ({ if (onClick) { return ( - ) diff --git a/apps/studio/scripts/ratchet-rules.json b/apps/studio/scripts/ratchet-rules.json index c681e8b26c9fe..4f0135b422ef0 100644 --- a/apps/studio/scripts/ratchet-rules.json +++ b/apps/studio/scripts/ratchet-rules.json @@ -18,6 +18,5 @@ "jsx-a11y/tabindex-no-positive", "jsx-a11y/anchor-is-valid", "jsx-a11y/heading-has-content", - "jsx-a11y/no-distracting-elements", - "supabase/require-explicit-tabindex" + "jsx-a11y/no-distracting-elements" ] diff --git a/apps/ui-library/registry/default/platform/platform-kit-nextjs/components/supabase-manager/index.tsx b/apps/ui-library/registry/default/platform/platform-kit-nextjs/components/supabase-manager/index.tsx index c669918667560..df2b716487888 100644 --- a/apps/ui-library/registry/default/platform/platform-kit-nextjs/components/supabase-manager/index.tsx +++ b/apps/ui-library/registry/default/platform/platform-kit-nextjs/components/supabase-manager/index.tsx @@ -224,7 +224,12 @@ function DialogView({ projectRef, isMobile }: { projectRef: string; isMobile?: b {index === stack.length - 1 ? ( {item.title} ) : ( - )} diff --git a/e2e/studio/features/table-editor.spec.ts b/e2e/studio/features/table-editor.spec.ts index 5b898591a024d..649f527acc504 100644 --- a/e2e/studio/features/table-editor.spec.ts +++ b/e2e/studio/features/table-editor.spec.ts @@ -1,5 +1,7 @@ import fs from 'fs' import path from 'path' +import { expect, Page } from '@playwright/test' + import { env } from '../env.config.js' import { expectClipboardValue } from '../utils/clipboard.js' import { dropTable, query } from '../utils/db/index.js' @@ -14,7 +16,6 @@ import { waitForGridDataToLoad, waitForTableToLoad, } from '../utils/wait-for-response.js' -import { expect, Page } from '@playwright/test' const deleteTable = async (page: Page, ref: string, tableName: string) => { const viewLocator = page.getByLabel(`View ${tableName}`) @@ -1254,7 +1255,7 @@ testRunner('table editor', () => { await expect(page.getByRole('link', { name: 'public.pw_table_fk_target' })).toBeVisible() // Remove the foreign key relation - await page.getByRole('button', { name: 'Remove' }).click() + await page.getByRole('button', { name: 'Remove', exact: true }).click() // Save the table changes after removing foreign key const removeFkPromise = waitForApiResponseWithTimeout(