Skip to content

chore(studio): improve table presentation#41217

Merged
dnywh merged 10 commits into
masterfrom
dnywh/chore/table-improvements
Dec 11, 2025
Merged

chore(studio): improve table presentation#41217
dnywh merged 10 commits into
masterfrom
dnywh/chore/table-improvements

Conversation

@dnywh

@dnywh dnywh commented Dec 10, 2025

Copy link
Copy Markdown
Contributor

What kind of change does this PR introduce?

  • UI improvements

What is the current behavior?

  • Our table for invoices (on the billing page) is using a deprecated table component
  • Our table for recent wrappers (on a wrapper page) has some extraneous markup and font size differences

What is the new behavior?

  • Replace the billing page table with the latest Table component
    • Minor other improvements to this area including copywriting clarification
  • Minor improvements to the wrapper page table
Before After
Supabase Supabase
Integrations  Supabase Integrations  Supabase

Note that the invoices have been mocked locally and artificially limited to five per page to show off pagination. I can share the mock data if you need it.

Summary by CodeRabbit

  • Style

    • Simplified and clarified billing/status messages; centered tooltip copy and tightened layout.
    • Adjusted table caption and footer styling for consistent spacing, borders, and alignment.
  • Refactor

    • Unified invoices and integrations into a consistent header/body/footer table layout with improved row structure, actions, icons, and pagination.
    • Accessibility improvements (sr-only labels, aria-labels) and a footer row showing totals.
  • Bug Fixes

    • Normalized button label casing ("Pay now").

✏️ Tip: You can customize this high-level summary in your review settings.

@dnywh dnywh requested review from a team as code owners December 10, 2025 05:30
@vercel

vercel Bot commented Dec 10, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
cms Ready Ready Preview Comment Dec 11, 2025 3:52am
design-system Ready Ready Preview Comment Dec 11, 2025 3:52am
docs Ready Ready Preview Comment Dec 11, 2025 3:52am
studio-self-hosted Ready Ready Preview Comment Dec 11, 2025 3:52am
studio-staging Ready Ready Preview Comment Dec 11, 2025 3:52am
ui-library Ready Ready Preview Comment Dec 11, 2025 3:52am
zone-www-dot-com Ready Ready Preview Comment Dec 11, 2025 3:52am
1 Skipped Deployment
Project Deployment Preview Comments Updated (UTC)
studio Ignored Ignored Dec 11, 2025 3:52am

@supabase

supabase Bot commented Dec 10, 2025

Copy link
Copy Markdown

This pull request has been ignored for the connected project xguihxuzqibwxjnimxev because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Dec 10, 2025
@coveralls

coveralls commented Dec 10, 2025

Copy link
Copy Markdown

Coverage Status

coverage: 68.471%. remained the same
when pulling 6a32d65 on dnywh/chore/table-improvements
into 1f84a19 on master.


- the link in the Payment Failure email
- the "Pay Now" button on the [organization's invoices page](/dashboard/org/_/billing#invoices)
- the "Pay now" button on the [organization's invoices page](/dashboard/org/_/billing#invoices)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I changed this button to sentence case below, so I’m just reflecting the UI 1:1 here.

</Badge>
</TooltipTrigger>
<TooltipContent side="bottom" className="max-w-sm">
<TooltipContent side="bottom" className="max-w-xs">

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Otherwise it’s a visually funky width.

Comment on lines +65 to +100
While most credit card payments get processed instantly, some Indian card providers
may take up to 72 hours to process payments. We’re still waiting for your card
provider to process this payment.
</p>

<p className="text-xs text-foreground">
If you run into this, we recommend{' '}
We recommend proactively{' '}
<InlineLink href={`${DOCS_URL}/guides/platform/credits#credit-top-ups`}>
topping up your credits
</InlineLink>{' '}
in advance to avoid running into this in the future.
to avoid this issue in the future.
</p>
</div>
) : paymentAttempted ? (
<p className="text-xs text-foreground">
We were not able to collect the payment. Make sure you have a valid payment method and
enough funds. Outstanding invoices may cause restrictions. You can manually pay the
invoice using the "Pay Now" button.
invoice using the Pay now” button.
</p>
) : (
<p className="text-xs text-foreground">
The invoice will soon be charged for. In case you pay via invoice instead of card,
please make sure to make the payment in a timely manner. You can also pay the invoice
using your card now using the "Pay Now" button.
The invoice will soon be charged for. Please make sure to pay in a timely manner,
especially if you pay via invoice instead of card. You can pay the invoice using your
card using the Pay now” button.
</p>
))}

{status === InvoiceStatus.PAID && (
<p className="text-xs text-foreground">
The invoice has been paid successfully. No action is required on your side.
The invoice has been paid successfully. No further action is required on your side.
</p>
)}

{status === InvoiceStatus.VOID && (
<p className="text-xs text-foreground">
This invoice has been forgiven. No action is required on your side.
This invoice has been forgiven. No further action is required on your side.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copywriting improvements for clarity.


return (
<Card className="max-w-5xl">
<CardContent className="p-0 pb-3">

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn’t seem necessary to wrap this Table in CardContent only to undo its padding. Or am I missing something?

<Card className="max-w-5xl">
<CardContent className="p-0 pb-3">
<Table className="">
<TableCaption className="text-xs">

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove text-xs. Keeping text size consistent is a way to improve clarity.

return (
<Button onClick={onPayNow} loading={isPending} disabled={isPending}>
Pay Now
Pay now

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sentence case as per our convention for button and title casing.

<TableRow>
{invoices.length > 0 && (
<TableHead className="w-2">
<span className="sr-only">Icon</span>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes the word “Icon” read by screen readers. Otherwise it’s just an ambitious thead.

Comment on lines +206 to +230
<CardFooter className="border-t p-4 flex items-center justify-between">
<p className="text-foreground-muted text-sm">
{isErrorCount
? 'Failed to retrieve total number of invoices'
: `Showing ${offset + 1} to ${offset + invoices.length} out of ${count} invoices`}
</p>
<div className="flex items-center gap-x-2" aria-label="Pagination">
<Button
icon={<ChevronLeft />}
aria-label={`Go to page ${page - 1}`}
type="default"
size="tiny"
disabled={page === 1}
onClick={async () => setPage(page - 1)}
/>
<Button
icon={<ChevronRight />}
aria-label={`Go to page ${page + 1}`}
type="default"
size="tiny"
disabled={page * PAGE_LIMIT >= (count ?? 0)}
onClick={async () => setPage(page + 1)}
/>
</div>
</CardFooter>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Table elements like tfoot and caption should only ever container inline elements. This is outside of the scope of the table, hence the CardFooter.

className={cn('bg-primary font-medium text-primary-foreground', className)}
{...props}
/>
<tfoot ref={ref} className={cn('border-t font-medium', className)} {...props} />

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove extraneous classes.

Comment on lines +164 to +170
className={cn(
'border-t', // TableCaption is aligned by parent Table at caption-bottom
'p-4 text-sm text-foreground-muted', // Match styling of TableCell
className
)}
// Should only contain inline elements
{...props}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As explained in comments:

  • It always needs a border-t
  • It should match the styling of TableCell

@github-actions

github-actions Bot commented Dec 10, 2025

Copy link
Copy Markdown
Contributor

🎭 Playwright Test Results

passed  58 passed
flaky  1 flaky
skipped  4 skipped

Details

stats  63 tests across 10 suites
duration  8 minutes, 38 seconds
commit  d31a7f3

Flaky tests

Features › table-editor.spec.ts › table editor › add enums and show enums on table

Skipped tests

Features › sql-editor.spec.ts › SQL Editor › snippet favourite works as expected
Features › sql-editor.spec.ts › SQL Editor › share with team works as expected
Features › sql-editor.spec.ts › SQL Editor › folders works as expected
Features › sql-editor.spec.ts › SQL Editor › other SQL snippets actions work as expected

@blacksmith-sh

This comment has been minimized.

</Table>
</CardContent>
<Table>
<TableCaption>

@joshenlim joshenlim Dec 10, 2025

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm a little confused with how caption is rendered (surprised that's rendered as a "footer", i.e. below the table header despite it being declared above) - but might need to remove border-t if there's no wrappers (there's an extra border in the empty state)
image

Should we be using TableFooter here instead actually?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bit of a text size difference as well - will add a text-xs just to keep things as they are although feel free to adjust

before:
image

after:
image

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

am just gonna shift table caption to below table body - since its meant to be rendered below the table body anyways

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good shout. Replaced with more semantic tfoot (our TableFooter).

@blacksmith-sh

This comment has been minimized.

@joshenlim joshenlim left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verified changes on staging preview!

@coderabbitai

coderabbitai Bot commented Dec 10, 2025

Copy link
Copy Markdown
Contributor

Warning

Rate limit exceeded

@dnywh has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 11 minutes and 47 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, 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 have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 6a32d65 and d31a7f3.

📒 Files selected for processing (1)
  • apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx (4 hunks)

Walkthrough

Refactors table layouts and styling in invoices and integrations, tightens tooltip layout and rewords several invoice status messages, changes "Pay Now" to "Pay now" text, and adjusts base TableCaption/TableFooter styles. No exported APIs or runtime control flow were altered.

Changes

Cohort / File(s) Summary
Docs & Button label
apps/docs/content/guides/platform/your-monthly-invoice.mdx, apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicePayButton.tsx
Changed visible text/casing from "Pay Now" to "Pay now" in docs and the invoice pay button. No logic changes.
Invoice status messaging & tooltip
apps/studio/components/interfaces/Billing/InvoiceStatusBadge.tsx
Tightened TooltipContent width (max-w-xs) and centered paragraph text; reworded several status messages and replaced some hard-coded fragments with inline components/typography. Conditional rendering preserved.
Integrations table restructure
apps/studio/components/interfaces/Integrations/Wrappers/WrapperTable.tsx
Replaced prior CardContent/TableCaption/TableHeader composition with a flat Table layout (TableHeader, TableBody, TableFooter); preserved WrapperRow rendering and action handling; simplified header/body structure.
Invoices list restructure
apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx
Migrated to Card + Table primitives with TableHeader/TableBody/TableRow/TableCell and a CardFooter pagination section; added icons, download action, loading/error/empty states, and accessibility labels; core invoice behaviors retained.
Base Table component styling
packages/ui/src/components/shadcn/ui/table.tsx
Consolidated icon imports; changed TableFooter styling to use border-t font-medium; expanded TableCaption to include border-t and padding.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Focus review on InvoicesSettings.tsx (row layout, pagination behavior, loading/error/empty render paths, aria labels).
  • Verify InvoiceStatusBadge.tsx tooltip width/centering across statuses to avoid overflow or truncation.
  • Confirm WrapperTable.tsx footer/header border logic and that TableFooter/TableCaption style changes in table.tsx do not regress other table usages or visual alignment.

Poem

🐰 I hopped through rows and polished the view,
Small words trimmed, tooltips snug and true,
Footers lined up, headers tidy and bright,
"Pay now" whispered softly in the night,
A rabbit's nudge — everything feels light.

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'chore(studio): improve table presentation' is concise and directly describes the main objective of the PR, which involves improving table UI components across multiple studio pages.
Description check ✅ Passed The description covers the required template sections including PR type (UI improvements), current behavior (deprecated table component, extraneous markup), new behavior (table replacement, copywriting updates), and includes before/after screenshots and additional context about mocked data.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

Comment @coderabbitai help to get the list of available commands and usage tips.

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

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1f84a19 and 77487bd.

📒 Files selected for processing (6)
  • apps/docs/content/guides/platform/your-monthly-invoice.mdx (1 hunks)
  • apps/studio/components/interfaces/Billing/InvoiceStatusBadge.tsx (1 hunks)
  • apps/studio/components/interfaces/Integrations/Wrappers/WrapperTable.tsx (2 hunks)
  • apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicePayButton.tsx (1 hunks)
  • apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx (4 hunks)
  • packages/ui/src/components/shadcn/ui/table.tsx (3 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
apps/studio/components/interfaces/Billing/InvoiceStatusBadge.tsx (3)
packages/ui/index.tsx (1)
  • TooltipContent (241-241)
apps/studio/components/ui/InlineLink.tsx (1)
  • InlineLink (17-44)
apps/studio/lib/constants/index.ts (1)
  • DOCS_URL (48-48)
apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx (3)
packages/ui/index.tsx (1)
  • Card (13-13)
apps/studio/components/ui/AlertError.tsx (1)
  • AlertError (49-92)
apps/studio/lib/helpers.ts (1)
  • formatCurrency (329-337)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: typecheck
  • GitHub Check: test
  • GitHub Check: test (1)
🔇 Additional comments (8)
apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicePayButton.tsx (1)

25-25: LGTM! Sentence case applied consistently.

The button label change aligns with the project's convention for button casing and matches related updates across the billing UI.

apps/docs/content/guides/platform/your-monthly-invoice.mdx (1)

69-69: LGTM! Documentation updated to match UI.

The button label in the documentation now accurately reflects the updated UI component.

apps/studio/components/interfaces/Billing/InvoiceStatusBadge.tsx (1)

60-99: LGTM! Copywriting and styling improvements enhance clarity.

The updated tooltip messages are more direct and user-friendly. The styling consolidation (text centering at parent level) maintains visual consistency while simplifying the markup.

packages/ui/src/components/shadcn/ui/table.tsx (3)

1-1: LGTM! Import consolidation.

Moving lucide-react imports to the top improves code organization.


47-47: LGTM! TableFooter styling updated for consistency.

The removal of background color and addition of border-t aligns with the new table design system where footers use borders instead of distinct backgrounds.


162-172: LGTM! Enhanced TableCaption styling with helpful documentation.

The expanded styling with border and padding matching TableCell creates visual consistency. The inline comments clarify the caption-bottom alignment behavior and element constraints, which will help future maintainers.

apps/studio/components/interfaces/Integrations/Wrappers/WrapperTable.tsx (1)

77-120: LGTM! Well-structured table refactor with accessibility improvements.

The restructure to a flat Table layout with explicit TableHeader, TableBody, and TableFooter components improves clarity and maintainability. Key improvements:

  • Screen reader label on Line 84 for the Actions column enhances accessibility
  • Conditional border-t-0 on Line 110 when there are no wrappers addresses the visual issue mentioned in past review comments
  • Footer hover prevention styling ensures consistent UX
apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx (1)

206-230: LGTM! Well-implemented pagination controls.

The CardFooter pagination implementation includes:

  • Clear status text showing current range and total count
  • Proper ARIA labels on navigation buttons for accessibility
  • Appropriate disabled states at boundaries

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

♻️ Duplicate comments (1)
apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx (1)

122-150: Fix empty-state colSpan and remove unreachable loading copy.

When invoices.length === 0, the icon header cell is not rendered, so the header has 5 columns. The empty-state row still uses colSpan={6}, causing a header/body column mismatch. Also, inside the empty-state message, isLoading ? 'Checking for invoices' : ... is never true in this branch because the outer conditional already handled isLoading.

You can fix both with:

-          ) : invoices.length === 0 ? (
-            <TableRow className="[&>td]:hover:bg-inherit">
-              <TableCell colSpan={6} className="py-6">
-                <p className="text-foreground-lighter">
-                  {isLoading ? 'Checking for invoices' : 'No invoices for this organization yet'}
-                </p>
-              </TableCell>
-            </TableRow>
+          ) : invoices.length === 0 ? (
+            <TableRow className="[&>td]:hover:bg-inherit">
+              <TableCell colSpan={5} className="py-6">
+                <p className="text-foreground-lighter">
+                  No invoices for this organization yet
+                </p>
+              </TableCell>
+            </TableRow>

This keeps the table grid consistent and removes dead conditional text.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 77487bd and 05dbe84.

📒 Files selected for processing (1)
  • apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx (4 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: test
  • GitHub Check: typecheck
  • GitHub Check: test (1)
🔇 Additional comments (2)
apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx (2)

2-2: Card/Table refactor and header styling look solid.

Using the shared Card + Table primitives here, along with tableHeadClassName to mute headers during loading/empty states and sr-only labels for the icon/actions columns, is consistent and accessible. No issues from my side on this structure.

Also applies to: 18-29, 98-121


155-196: Invoice row markup and accessibility look good.

Decorative icon is correctly marked aria-hidden, the sr-only "Icon" header labels the column for AT, amounts are marked translate="no", invoice numbers are monospaced, and the status + actions cells are logically grouped. The row structure matches the header columns and looks clean.

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

♻️ Duplicate comments (1)
apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx (1)

203-207: Guard against count being undefined in footer copy.

When the count query hasn't resolved yet, count will be undefined, resulting in user-facing text like "out of undefined invoices".

           <p className="text-foreground-muted text-sm">
             {isErrorCount
               ? 'Failed to retrieve total number of invoices'
-              : `Showing ${offset + 1} to ${offset + invoices.length} out of ${count} invoices`}
+              : typeof count === 'number'
+                ? `Showing ${offset + 1} to ${offset + invoices.length} out of ${count} invoices`
+                : `Showing ${offset + 1} to ${offset + invoices.length} invoices`}
           </p>
🧹 Nitpick comments (2)
apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx (2)

208-208: Consider adding role="navigation" for proper landmark semantics.

The aria-label="Pagination" on a div doesn't create a navigation landmark. Adding role="navigation" allows assistive technologies to identify this as a navigable region.

-          <div className="flex items-center gap-x-2" aria-label="Pagination">
+          <div className="flex items-center gap-x-2" role="navigation" aria-label="Pagination">

215-215: Unnecessary async on synchronous callbacks.

The setPage calls are synchronous state updates; the async keyword has no effect here and can be removed for clarity.

-              onClick={async () => setPage(page - 1)}
+              onClick={() => setPage(page - 1)}
...
-              onClick={async () => setPage(page + 1)}
+              onClick={() => setPage(page + 1)}

Also applies to: 223-223

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 05dbe84 and e727425.

📒 Files selected for processing (1)
  • apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx (4 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx (3)
packages/ui/index.tsx (1)
  • Card (13-13)
apps/studio/components/ui/AlertError.tsx (1)
  • AlertError (49-92)
apps/studio/lib/helpers.ts (1)
  • formatCurrency (329-337)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: test (1)
  • GitHub Check: typecheck
  • GitHub Check: test
🔇 Additional comments (3)
apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx (3)

98-100: Good UX pattern for loading state visual feedback.

Fading the header text during loading/empty states provides clear visual indication that data is not yet available.


122-148: Column span logic is now correct across all states.

The conditional colSpan={invoices.length > 0 ? 6 : 5} properly accounts for the absent icon column during loading/error states, and the empty state correctly uses colSpan={5}.


153-194: Invoice row rendering is clean and accessible.

The ARIA issue has been addressed (removed redundant aria-label from the decorative icon), and the row structure properly uses semantic table cells with appropriate formatting.

@dnywh dnywh enabled auto-merge (squash) December 11, 2025 03:28
@dnywh dnywh merged commit 7d93a19 into master Dec 11, 2025
26 checks passed
@dnywh dnywh deleted the dnywh/chore/table-improvements branch December 11, 2025 03:52
stylessh pushed a commit that referenced this pull request Dec 11, 2025
* billing improvements

* wrapper improvements

* border fix

* Nit adjustments

* fixes

* fix aria

* fix loading

* fixes

* fix

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
stylessh added a commit that referenced this pull request Dec 16, 2025
* wip

* wip

* single page

* new sections and polishing up

* reponsive

* nits

* semantic titles

* optimize imgs

* nits

* wup

* hero bubbles

* Update apps/www/components/Wrapped/Pages/SupabaseSelect.tsx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* fix: Use `amaro` for stripping types in code samples (#41229)

* Fix the error for babel/preset-typescript in docs.

* Unfix the version.

* Try using amaro for type stripping.

* Run prettier after stripping types.

* Fix tests.

---------

Co-authored-by: Charis Lam <26616127+charislam@users.noreply.github.com>

* fix: Fix minor issue in the foreign key selector (#41235)

Change the isPending state to isLoading.

* docs: Remove empty troubleshooting fields (#41236)

* Remove emoty fields

* Fix lock file

* chore: update self-hosted image versions (#41234)

* Feature: show index advisor in table editor (#41166)

* added table advisor query

* updated to include table editor performance

* updated JSON B

* added side panel

* updated query indexes to show highlights context

* show index advisor in table editor

* updated invalidation logic

* added color updates

* added query indexes

* updated query performance type

* updated overflow and title

* put behind flag

* remove gap

* added on close

* Update apps/studio/data/database/table-index-advisor-query.ts

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* updated styling

---------

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* fix: useFlag to update initial check of flag store (#41209)

* fix flag lib

* updated uneeded logic

* updated logic

* remove line

* updated comment

* fix: Hide favourites and share snippets on self-hosted variant (#41227)

* Hide favorite and share actions for self-hosted version.

* Rename the query on save only on platform.

* Simplify useCheckOpenAiKeyQuery.

* Rename with AI now depends if the OPENAI_API_KEY is set.

* Minor fixes.

* Fix the tests to use .skip for skipping tests. Remove extra port params.

* Make the test for favourites work only on platform variant.

* feat(reports): support new database report granularity FE-2221 (#41228)

* handle new granularity

* undo unnecessary type change

* rm console log

* fix: blog auto scroll post app router migration for blog (#41220)

Enhance TOC highlighting and anchor scroll in blog posts

Refactored useActiveAnchors hook to support smooth hash scrolling and improved TOC highlighting based on scroll position. Added options for custom selectors and offset, and updated BlogPostClient to enable scroll-to-anchor and TOC highlight functionality.

* fix: remove flakiness with launch options and default timeouts (#41245)

* attempt to make table editor tests less flaky

* updated race conditions for table editor

* updated playwright config with optimized launch options

* reduce workers

* updated timeouts for tests

* updated config to have a global timeout of 20 seconds

* updated to be visible

* chore: update changelog and image versions file (#41244)

* feat(design-system): improve table docs (#41215)

* docs updates

* docs expansion

* minor docs fix

* improvements

* fix dependencies

* docs expansion

* more table examples

* map over data

* improve copy

* Update apps/design-system/registry/default/example/table-row-link-actions.tsx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update apps/design-system/registry/default/example/table-row-link-actions.tsx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* fixes

* fix

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* chore(studio): improve table presentation (#41217)

* billing improvements

* wrapper improvements

* border fix

* Nit adjustments

* fixes

* fix aria

* fix loading

* fixes

* fix

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>

* Save opened side bar in local storage, and init on new session (#41224)

* Save opened side bar in local storage, and init on new session

* Fix test

* Fix

* Nit

* docs(design-system): Data Table and Data Grid documentation (#41252)

* basic differentiation

* docs

* data-grid examples

* data-grid-demo

* data-table

* demo

* use existing components

* improvements

* markup

* docs

* remove data table

* lint

* Update apps/design-system/content/docs/ui-patterns/empty-states.mdx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* fix ref

* use TanStack sorting

* grammar

* dependency

* 📝 Add docstrings to `dnywh/docs/data-table-data-grid` (#41255)

Docstrings generation was requested by @MildTomato.

* #41252 (comment)

The following files were modified:

* `apps/design-system/registry/default/example/data-grid-demo.tsx`
* `apps/design-system/registry/default/example/data-grid-empty-state.tsx`
* `apps/design-system/registry/default/example/data-table-demo.tsx`

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* docs: fix grammatical error in generate-text-embeddings guide (#41187)

* docs: fix grammatical error in generate-text-embeddings guide

* Update generate-text-embeddings.mdx

Co-authored-by: Chris Chinchilla <chris@chrischinchilla.com>

---------

Co-authored-by: Chris Chinchilla <chris@chrischinchilla.com>

* chore: uniform card and panel padding-x (#41237)

* docs: Fix typo in API introduction documentation (#41251)

* chore(billing): regenerate api-types to include vanity subdomain entitlement (#41257)

chore(billing: regenerate api-types to include vanity subdomain entitlement

* Add liam to humans.txt (#41169)

* docs: Add link to restoring backup to new Supabase project (#39108)

Co-authored-by: Chris Chinchilla <chris.ward@supabase.io>

* feat(code-block): add word wrap functionality and controls to code bl… (#39689)

* feat(code-block): add word wrap functionality and controls to code blocks

* feat(code-block): enhance layout of code block with improved line number display and structure

* fix h-full issue

* fix Prettier issue

---------

Co-authored-by: Chris Chinchilla <chris.ward@supabase.io>

* wip

* wip

* single page

* optimize imgs

* revert

* pkg

* update new content

* rm overflow

* new data

* nits

* nits

* og

* border

* fix: improve AnimatedCounter and FloatingStatBubbles/Intro components

- Update AnimatedCounter to correctly reflect value changes in the DOM.
- Add lifetime management for timers in FloatingStatBubbles and FloatingBoxes to prevent memory leaks.
- Ensure cleanup of timers on component unmount for better resource management.

* dbs

* minify images

* text-brand-link on light mode

* fix grid

* max-width on images

* address comments

* fixes

* faster image rotation

* upd og

* new launch

* nitsgs

* last nits

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
Co-authored-by: Charis Lam <26616127+charislam@users.noreply.github.com>
Co-authored-by: Chris Chinchilla <chris.ward@supabase.io>
Co-authored-by: Andrey A. <56412611+aantti@users.noreply.github.com>
Co-authored-by: Ali Waseem <waseema393@gmail.com>
Co-authored-by: Jordi Enric <37541088+jordienr@users.noreply.github.com>
Co-authored-by: Jonathan Summers-Muir <MildTomato@users.noreply.github.com>
Co-authored-by: Danny White <3104761+dnywh@users.noreply.github.com>
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
Co-authored-by: Dinesh Dawonauth <dineshddawo@gmail.com>
Co-authored-by: Chris Chinchilla <chris@chrischinchilla.com>
Co-authored-by: Francesco Sansalvadore <f.sansalvadore@gmail.com>
Co-authored-by: 李子衿 <160584929+hhhez@users.noreply.github.com>
Co-authored-by: Kanishk Dudeja <kanishk@kanishkdudeja.com>
Co-authored-by: lch-supa <liam.hogan@supabase.io>
Co-authored-by: Timothy Lim <tim.lim@supabase.io>
Co-authored-by: Priyanshu Thapliyal <114170980+Priyanshuthapliyal2005@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants