From 1e56ec7edd85d1fd44aec0b37ad049c7a901c176 Mon Sep 17 00:00:00 2001
From: Kanishk Dudeja
Date: Thu, 5 Feb 2026 16:09:08 +0530
Subject: [PATCH 01/11] feat(billing): UI to download Orb receipts (#42083)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
### Summary
This PR adds the ability to download payment receipts for paid Orb
invoices from the billing invoices page.
This depends on the backend PR that adds the receipt download endpoint.
### UI screenshot
The receipt button only appears for invoices with `status === 'paid'`.
### Testing
#### Manual testing
1. Navigate to Organization Settings → Billing → Invoices
2. Find a paid invoice in the list
3. Click the receipt icon button
4. Verify receipt PDF opens in new tab
5. Try with an unpaid invoice - button should not appear
6. Try invoice that has no receipt (paid with credit balance) → error
toast with "Receipt not available"
### Alternative design choices
#### Alternative option 1
#### Alternative option 2
#### Alternative option 3
## Summary by CodeRabbit
## Release Notes
* **New Features**
* Added invoice receipt viewing and download functionality. Paid
invoices with outstanding amounts now include a Receipt action, enabling
users to access detailed payment documentation through the billing
interface. Error handling ensures a seamless experience when retrieving
receipts.
---
.../InvoicesSettings/InvoicesSettings.tsx | 36 +++++++++++++++----
.../data/invoices/invoice-receipt-query.ts | 25 +++++++++++++
2 files changed, 54 insertions(+), 7 deletions(-)
create mode 100644 apps/studio/data/invoices/invoice-receipt-query.ts
diff --git a/apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx b/apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx
index 4a216e6ffe7b8..90750e46b455b 100644
--- a/apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx
+++ b/apps/studio/components/interfaces/Organization/InvoicesSettings/InvoicesSettings.tsx
@@ -1,33 +1,34 @@
-import dayjs from 'dayjs'
-import { ChevronLeft, ChevronRight, Download, FileText } from 'lucide-react'
-import { useEffect, useState } from 'react'
-import { toast } from 'sonner'
-
import InvoiceStatusBadge from 'components/interfaces/Billing/InvoiceStatusBadge'
import { InvoiceStatus } from 'components/interfaces/Billing/Invoices.types'
import AlertError from 'components/ui/AlertError'
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
import PartnerManagedResource from 'components/ui/PartnerManagedResource'
import { getInvoice } from 'data/invoices/invoice-query'
+import { getInvoiceReceipt } from 'data/invoices/invoice-receipt-query'
import { useInvoicesCountQuery } from 'data/invoices/invoices-count-query'
import { useInvoicesQuery } from 'data/invoices/invoices-query'
+import dayjs from 'dayjs'
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
import { MANAGED_BY } from 'lib/constants/infrastructure'
import { formatCurrency } from 'lib/helpers'
+import { ChevronLeft, ChevronRight, FileText, Receipt, ScrollText } from 'lucide-react'
+import { useEffect, useState } from 'react'
+import { toast } from 'sonner'
import { Organization } from 'types/base'
import {
Button,
Card,
CardFooter,
- cn,
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
+ cn,
} from 'ui'
import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader'
+
import InvoicePayButton from './InvoicePayButton'
const PAGE_LIMIT = 5
@@ -87,6 +88,17 @@ export const InvoicesSettings = () => {
}
}
+ const fetchReceipt = async (invoiceId: string) => {
+ if (!slug) return
+
+ try {
+ const receipt = await getInvoiceReceipt({ invoiceId, slug })
+ if (receipt?.receipt_pdf) window.open(receipt.receipt_pdf, '_blank')
+ } catch (error: any) {
+ toast.error(`Failed to fetch receipt: ${error.message}`)
+ }
+ }
+
if (
selectedOrganization?.managed_by !== undefined &&
selectedOrganization?.managed_by !== 'supabase'
@@ -190,10 +202,20 @@ export const InvoicesSettings = () => {
}
+ icon={}
onClick={() => fetchInvoice(x.id)}
tooltip={{ content: { side: 'bottom', text: 'Download invoice' } }}
/>
+
+ {x.status === InvoiceStatus.PAID && x.amount_due > 0 && (
+ }
+ onClick={() => fetchReceipt(x.id)}
+ tooltip={{ content: { side: 'bottom', text: 'Download receipt' } }}
+ />
+ )}
diff --git a/apps/studio/data/invoices/invoice-receipt-query.ts b/apps/studio/data/invoices/invoice-receipt-query.ts
new file mode 100644
index 0000000000000..4f0c17066f52e
--- /dev/null
+++ b/apps/studio/data/invoices/invoice-receipt-query.ts
@@ -0,0 +1,25 @@
+import { get, handleError } from 'data/fetchers'
+
+export type InvoiceReceiptVariables = {
+ invoiceId: string
+ slug: string
+}
+
+export async function getInvoiceReceipt(
+ { invoiceId, slug }: InvoiceReceiptVariables,
+ signal?: AbortSignal
+) {
+ if (!invoiceId) throw new Error('Invoice ID is required')
+ if (!slug) throw new Error('Slug is required')
+
+ const { data, error } = await get(
+ `/platform/organizations/{slug}/billing/invoices/{invoice_id}/receipt`,
+ {
+ params: { path: { invoice_id: invoiceId, slug } },
+ signal,
+ }
+ )
+
+ if (error) handleError(error)
+ return data
+}
From 6d6510c337f397709c1a91ad39f868779ae67476 Mon Sep 17 00:00:00 2001
From: Joshen Lim
Date: Thu, 5 Feb 2026 19:10:08 +0800
Subject: [PATCH 02/11] Fix new home page recent branch stat (#42497)
## Context
Small fix for the new home page "Recent branch" stat to add some
truncate
Before:
After:
Unrelated but I also set a max width to the project and branch dropdowns
in the layout header
## Summary by CodeRabbit
* **Style**
* Enhanced display of branch and project names with improved truncation
and wider max-widths.
* Added hover tooltips (title attributes) for branch and project names
to improve accessibility.
* Refined text overflow handling and styling across dropdowns and stat
components.
* **Tests**
* Adjusted clipboard test timing to await the resolved promise before
asserting write() was called.
---
.../interfaces/HomeNew/ActivityStats.tsx | 9 +++++----
.../layouts/AppLayout/BranchDropdown.tsx | 20 ++++++++++---------
.../layouts/AppLayout/ProjectDropdown.tsx | 18 +++++++++--------
.../ui/OrganizationProjectSelector.tsx | 1 -
apps/studio/components/ui/SingleStat.tsx | 12 +++++------
apps/studio/lib/helpers.test.ts | 3 ++-
6 files changed, 34 insertions(+), 29 deletions(-)
diff --git a/apps/studio/components/interfaces/HomeNew/ActivityStats.tsx b/apps/studio/components/interfaces/HomeNew/ActivityStats.tsx
index 0c7cf0d0f9784..f48c89c90fe6d 100644
--- a/apps/studio/components/interfaces/HomeNew/ActivityStats.tsx
+++ b/apps/studio/components/interfaces/HomeNew/ActivityStats.tsx
@@ -1,16 +1,16 @@
-import dayjs from 'dayjs'
-import { Archive, Database, GitBranch } from 'lucide-react'
-import { useMemo } from 'react'
-
import { useParams } from 'common'
import { SingleStat } from 'components/ui/SingleStat'
import { useBranchesQuery } from 'data/branches/branches-query'
import { useBackupsQuery } from 'data/database/backups-query'
import { DatabaseMigration, useMigrationsQuery } from 'data/database/migrations-query'
+import dayjs from 'dayjs'
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
import { parseMigrationVersion } from 'lib/migration-utils'
+import { Archive, Database, GitBranch } from 'lucide-react'
+import { useMemo } from 'react'
import { cn, Skeleton } from 'ui'
import { TimestampInfo } from 'ui-patterns'
+
import { ServiceStatus } from './ServiceStatus'
export const ActivityStats = () => {
@@ -143,6 +143,7 @@ export const ActivityStats = () => {
'truncate',
!latestNonDefaultBranch && 'text-foreground-lighter truncate'
)}
+ title={latestNonDefaultBranch?.name ?? 'No branches'}
>
{latestNonDefaultBranch?.name ?? 'No branches'}
diff --git a/apps/studio/components/layouts/AppLayout/BranchDropdown.tsx b/apps/studio/components/layouts/AppLayout/BranchDropdown.tsx
index 3529b54fd67ba..8bf383693e8ed 100644
--- a/apps/studio/components/layouts/AppLayout/BranchDropdown.tsx
+++ b/apps/studio/components/layouts/AppLayout/BranchDropdown.tsx
@@ -1,3 +1,6 @@
+import { useParams } from 'common'
+import { Branch, useBranchesQuery } from 'data/branches/branches-query'
+import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
import {
AlertCircle,
Check,
@@ -10,30 +13,26 @@ import {
import Link from 'next/link'
import { useRouter } from 'next/router'
import { useState } from 'react'
-
-import { useParams } from 'common'
-import { Branch, useBranchesQuery } from 'data/branches/branches-query'
-import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
import { useAppStateSnapshot } from 'state/app-state'
import {
Badge,
Button,
+ cn,
+ Command_Shadcn_,
CommandEmpty_Shadcn_,
CommandGroup_Shadcn_,
CommandInput_Shadcn_,
CommandItem_Shadcn_,
CommandList_Shadcn_,
CommandSeparator_Shadcn_,
- Command_Shadcn_,
+ Popover_Shadcn_,
PopoverContent_Shadcn_,
PopoverTrigger_Shadcn_,
- Popover_Shadcn_,
ScrollArea,
- cn,
} from 'ui'
import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader'
+
import { sanitizeRoute } from './ProjectDropdown'
-import { partition } from 'lodash'
const BranchLink = ({
branch,
@@ -128,7 +127,10 @@ export const BranchDropdown = () => {
{isSuccess && (
<>
-
+
{isBranchingEnabled ? selectedBranch?.name : 'main'}
{isBranchingEnabled ? (
diff --git a/apps/studio/components/layouts/AppLayout/ProjectDropdown.tsx b/apps/studio/components/layouts/AppLayout/ProjectDropdown.tsx
index 6c25562f360a3..0cdc1850dcc7a 100644
--- a/apps/studio/components/layouts/AppLayout/ProjectDropdown.tsx
+++ b/apps/studio/components/layouts/AppLayout/ProjectDropdown.tsx
@@ -1,9 +1,4 @@
-import { Box, Check, ChevronsUpDown, Plus } from 'lucide-react'
-import Link from 'next/link'
-import { useRouter } from 'next/router'
import { ParsedUrlQuery } from 'querystring'
-import { useState } from 'react'
-
import { useParams } from 'common'
import { OrganizationProjectSelector } from 'components/ui/OrganizationProjectSelector'
import { useProjectDetailQuery } from 'data/projects/project-detail-query'
@@ -11,7 +6,11 @@ import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
import { IS_PLATFORM } from 'lib/constants'
-import { Badge, Button, CommandGroup_Shadcn_, CommandItem_Shadcn_, cn } from 'ui'
+import { Box, Check, ChevronsUpDown, Plus } from 'lucide-react'
+import Link from 'next/link'
+import { useRouter } from 'next/router'
+import { useState } from 'react'
+import { Badge, Button, cn, CommandGroup_Shadcn_, CommandItem_Shadcn_ } from 'ui'
import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader'
export const sanitizeRoute = (route: string, routerQueries: ParsedUrlQuery) => {
@@ -60,8 +59,11 @@ export const ProjectDropdown = () => {
className="flex items-center gap-2 flex-shrink-0 text-sm"
>
-
- {selectedProject?.name}
+
+ {selectedProject.name}
diff --git a/apps/studio/components/ui/OrganizationProjectSelector.tsx b/apps/studio/components/ui/OrganizationProjectSelector.tsx
index 8105ceb42f0b5..f53cfa2bfbf38 100644
--- a/apps/studio/components/ui/OrganizationProjectSelector.tsx
+++ b/apps/studio/components/ui/OrganizationProjectSelector.tsx
@@ -4,7 +4,6 @@ import { OrgProject, useOrgProjectsInfiniteQuery } from 'data/projects/org-proje
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
import { Check, ChevronsUpDown, HelpCircle } from 'lucide-react'
import { ReactNode, useEffect, useMemo, useRef, useState } from 'react'
-
import {
Button,
cn,
diff --git a/apps/studio/components/ui/SingleStat.tsx b/apps/studio/components/ui/SingleStat.tsx
index 7869aa695bb60..371f4965c28d0 100644
--- a/apps/studio/components/ui/SingleStat.tsx
+++ b/apps/studio/components/ui/SingleStat.tsx
@@ -1,9 +1,9 @@
-import Link from 'next/link'
-import type { ReactNode } from 'react'
-
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
+import Link from 'next/link'
+import type { ReactNode } from 'react'
+import { cn } from 'ui'
type SingleStatProps = {
icon: ReactNode
@@ -44,11 +44,11 @@ export const SingleStat = ({
}
}
const content = (
-
-
+
+
{icon}
-
+
{label}
{value}
diff --git a/apps/studio/lib/helpers.test.ts b/apps/studio/lib/helpers.test.ts
index 4ce0dfe4f6227..43442a64dabb2 100644
--- a/apps/studio/lib/helpers.test.ts
+++ b/apps/studio/lib/helpers.test.ts
@@ -206,8 +206,9 @@ describe('copyToClipboard', () => {
})
it('uses clipboard.write if available', async () => {
- await copyToClipboard('hello')
+ const promise = copyToClipboard('hello')
vi.runAllTimers()
+ await promise
expect(writeMock).toHaveBeenCalled()
})
From 1cd1ebfc7f2e77d316043b3a51e626b15959c70d Mon Sep 17 00:00:00 2001
From: Ivan Vasilov
Date: Thu, 5 Feb 2026 13:54:10 +0100
Subject: [PATCH 03/11] chire: Sort imports in all packages, `cms`,
`design-system` and `ui-library` apps (#41610)
Sorted all imports in all packages, `cms`, `design-system` and
`ui-library` apps by running `pnpm format` on them.
All changes in this PR are done by the script.
---
apps/cms/scripts/migrate.ts | 1 +
apps/cms/src/access/isAdmin.ts | 1 +
apps/cms/src/blocks/Banner/Component.tsx | 6 +--
apps/cms/src/blocks/Banner/config.ts | 3 +-
apps/cms/src/blocks/Code/Component.client.tsx | 2 +
apps/cms/src/blocks/Code/CopyButton.tsx | 4 +-
apps/cms/src/blocks/MediaBlock/Component.tsx | 8 ++--
apps/cms/src/blocks/Quote/Component.tsx | 4 +-
apps/cms/src/blocks/YouTube/Component.tsx | 4 +-
apps/cms/src/collections/Categories.ts | 1 +
apps/cms/src/collections/Customers/index.ts | 21 ++++-----
apps/cms/src/collections/Events/index.ts | 23 ++++-----
apps/cms/src/collections/Media.ts | 2 +-
.../Posts/hooks/populateAuthors.ts | 1 +
apps/cms/src/collections/Posts/index.ts | 23 ++++-----
apps/cms/src/collections/Users.ts | 1 +
apps/cms/src/components/AdminBar/index.tsx | 7 ++-
apps/cms/src/components/Card/index.tsx | 8 ++--
.../components/CollectionArchive/index.tsx | 2 +-
apps/cms/src/components/Link/index.tsx | 4 +-
.../components/LivePreviewListener/index.tsx | 4 +-
.../src/components/Media/ImageMedia/index.tsx | 4 +-
.../src/components/Media/VideoMedia/index.tsx | 3 +-
apps/cms/src/components/Media/index.tsx | 3 +-
apps/cms/src/components/Pagination/index.tsx | 6 ++-
apps/cms/src/components/RichText/index.tsx | 11 ++---
apps/cms/src/components/ui/button.tsx | 5 +-
apps/cms/src/components/ui/card.tsx | 3 +-
apps/cms/src/components/ui/checkbox.tsx | 3 +-
apps/cms/src/components/ui/input.tsx | 3 +-
apps/cms/src/components/ui/label.tsx | 5 +-
apps/cms/src/components/ui/pagination.tsx | 6 +--
apps/cms/src/components/ui/select.tsx | 3 +-
apps/cms/src/components/ui/textarea.tsx | 3 +-
apps/cms/src/fields/defaultLexical.ts | 4 +-
apps/cms/src/fields/linkGroup.ts | 3 +-
apps/cms/src/fields/slug/SlugComponent.tsx | 7 +--
apps/cms/src/hooks/revalidateRedirects.ts | 3 +-
apps/cms/src/payload.config.ts | 13 +++--
apps/cms/src/providers/HeaderTheme/index.tsx | 5 +-
.../providers/Theme/ThemeSelector/index.tsx | 11 ++---
apps/cms/src/providers/Theme/index.tsx | 7 ++-
apps/cms/src/utilities/generateMeta.ts | 5 +-
apps/cms/src/utilities/generatePreviewPath.ts | 3 +-
apps/cms/src/utilities/getDocument.ts | 5 +-
apps/cms/src/utilities/getGlobals.ts | 5 +-
apps/cms/src/utilities/mergeOpenGraph.ts | 1 +
apps/cms/src/utilities/ui.ts | 3 +-
apps/cms/src/utilities/useClickableCard.ts | 2 +-
apps/cms/src/utilities/useDebounce.ts | 2 +-
.../app/(app)/docs/[[...slug]]/page.tsx | 2 +
apps/design-system/app/(app)/layout.tsx | 5 +-
apps/design-system/app/(app)/page.tsx | 3 +-
apps/design-system/app/Providers.tsx | 2 +-
apps/design-system/app/SonnerToast.tsx | 3 +-
apps/design-system/app/layout.tsx | 2 +-
.../components/code-block-wrapper.tsx | 5 +-
.../components/code-fragment.tsx | 5 +-
apps/design-system/components/colors.tsx | 5 +-
.../design-system/components/command-menu.tsx | 8 ++--
.../components/component-example.tsx | 12 ++---
.../components/component-preview.tsx | 14 +++---
.../components/component-source.tsx | 2 +-
apps/design-system/components/copy-button.tsx | 3 +-
.../components/homepage-svg-handler.tsx | 2 +-
apps/design-system/components/icons.tsx | 1 +
.../components/mdx-components.tsx | 47 +++++++++----------
.../components/mobile-sidebar-sheet.tsx | 3 +-
apps/design-system/components/pager.tsx | 6 +--
.../components/side-navigation-item.tsx | 7 +--
.../components/sonner-expand-config.tsx | 3 +-
.../components/sonner-expand-position.tsx | 5 +-
.../design-system/components/source-panel.tsx | 9 ++--
.../components/theme-settings.tsx | 3 +-
.../components/theme-switcher-dropdown.tsx | 2 +-
apps/design-system/components/toc.tsx | 2 +-
.../components/top-navigation.tsx | 3 +-
.../content/docs/components/combobox.mdx | 4 +-
.../content/docs/components/date-picker.mdx | 4 +-
.../content/docs/components/sidebar.mdx | 6 +--
.../content/docs/components/tree-view.mdx | 2 +-
.../docs/fragments/inner-side-menu.mdx | 2 +-
.../content/docs/fragments/multi-select.mdx | 2 +-
apps/design-system/content/docs/icons.mdx | 3 +-
.../context/mobile-sidebar-context.tsx | 3 +-
apps/design-system/hooks/use-config.ts | 6 ++-
apps/design-system/lib/rehype-component.ts | 7 +--
apps/design-system/lib/rehype-npm-command.ts | 3 +-
apps/design-system/lib/toc.ts | 1 -
.../default/block/chart-bar-interactive.tsx | 14 ++++--
.../default/block/chart-composed-actions.tsx | 12 ++---
.../default/block/chart-composed-basic.tsx | 12 ++---
.../default/block/chart-composed-demo.tsx | 6 +--
.../default/block/chart-composed-metrics.tsx | 10 ++--
.../default/block/chart-composed-states.tsx | 10 ++--
.../default/block/chart-composed-table.tsx | 16 +++----
.../default/example/aspect-ratio-demo.tsx | 1 -
.../default/example/button-as-child.tsx | 1 -
.../registry/default/example/button-icon.tsx | 1 -
.../default/example/button-with-icon.tsx | 1 -
.../default/example/calendar-demo.tsx | 1 -
.../default/example/calendar-form.tsx | 6 +--
.../example/calendar-react-hook-form.tsx | 6 +--
.../default/example/chart-bar-demo-legend.tsx | 1 -
.../example/chart-bar-demo-tooltip.tsx | 1 -
.../default/example/chart-bar-demo.tsx | 1 -
.../example/checkbox-form-multiple.tsx | 3 +-
.../default/example/checkbox-form-single.tsx | 3 +-
.../default/example/collapsible-demo.tsx | 11 +++--
.../color-usage-surface-studio-frame.tsx | 3 +-
.../example/color-usage-surface-studio.tsx | 3 +-
.../color-usage-surface-www-and-docs.tsx | 3 +-
.../default/example/combobox-demo.tsx | 4 +-
.../example/combobox-dropdown-menu.tsx | 9 ++--
.../default/example/combobox-form.tsx | 8 ++--
.../default/example/combobox-popover.tsx | 13 +++--
.../default/example/combobox-responsive.tsx | 17 ++++---
.../registry/default/example/command-demo.tsx | 1 -
.../default/example/command-dialog.tsx | 3 +-
.../default/example/copy-confirmations.tsx | 2 +-
.../default/example/copy-empty-states.tsx | 2 +-
.../default/example/copy-tooltips.tsx | 2 +-
.../default/example/data-grid-demo.tsx | 2 +
.../default/example/data-grid-empty-state.tsx | 2 +
.../default/example/data-table-demo.tsx | 1 -
.../default/example/date-picker-demo.tsx | 4 +-
.../default/example/date-picker-form.tsx | 6 +--
.../example/date-picker-with-presets.tsx | 4 +-
.../example/date-picker-with-range.tsx | 4 +-
.../default/example/dialog-close-button.tsx | 1 -
.../registry/default/example/drawer-demo.tsx | 5 +-
.../default/example/drawer-dialog.tsx | 6 +--
.../example/dropdown-menu-checkboxes.tsx | 1 -
.../default/example/dropdown-menu-demo.tsx | 3 +-
.../example/dropdown-menu-radio-group.tsx | 3 +-
.../empty-state-presentational-buttons.tsx | 1 -
.../default/example/field-choice-card.tsx | 6 +--
.../registry/default/example/field-demo.tsx | 14 +++---
.../default/example/field-fieldset.tsx | 8 ++--
.../registry/default/example/field-group.tsx | 6 +--
.../registry/default/example/field-hear.tsx | 8 ++--
.../registry/default/example/field-input.tsx | 4 +-
.../registry/default/example/field-radio.tsx | 2 +-
.../default/example/field-responsive.tsx | 12 ++---
.../registry/default/example/field-select.tsx | 6 +--
.../registry/default/example/field-slider.tsx | 2 +-
.../registry/default/example/field-switch.tsx | 2 +-
.../default/example/field-textarea.tsx | 4 +-
.../example/form-item-layout-after-label.tsx | 2 +-
.../example/form-item-layout-before-label.tsx | 2 +-
.../default/example/form-item-layout-demo.tsx | 2 +-
.../form-item-layout-with-horizontal.tsx | 2 +-
.../example/form-patterns-pagelayout.tsx | 9 ++--
.../example/form-patterns-sidepanel.tsx | 9 ++--
.../default/example/hover-card-demo.tsx | 13 +++--
.../default/example/inner-side-menu-demo.tsx | 2 +-
.../default/example/inner-side-menu-empty.tsx | 10 ++--
.../inner-side-menu-multiple-sections.tsx | 2 +-
.../example/inner-side-menu-static-titles.tsx | 4 +-
.../example/inner-side-menu-with-search.tsx | 12 ++---
.../registry/default/example/input-form.tsx | 3 +-
.../default/example/input-otp-controlled.tsx | 1 -
.../default/example/input-otp-form.tsx | 3 +-
.../default/example/input-otp-separator.tsx | 1 -
.../default/example/input-with-button.tsx | 3 +-
.../metric-card-minimal-horizontal.tsx | 4 +-
.../default/example/metric-card-minimal.tsx | 4 +-
.../metric-card-with-icon-link-tooltip.tsx | 8 ++--
.../registry/default/example/metric-card.tsx | 6 +--
.../registry/default/example/mode-toggle.tsx | 12 +++--
.../default/example/nav-menu-icons.tsx | 2 +-
.../default/example/navigation-menu-demo.tsx | 6 +--
.../example/navigation-menu-responsive.tsx | 9 ++--
.../example/page-layout-list-simple.tsx | 20 ++++----
.../default/example/page-layout-settings.tsx | 2 +-
.../default/example/page-section-demo.tsx | 8 ++--
.../example/page-section-horizontal.tsx | 6 +--
.../example/page-section-with-aside.tsx | 8 ++--
.../registry/default/example/popover-demo.tsx | 12 +++--
.../default/example/progress-demo.tsx | 1 -
.../default/example/radio-group-card-form.tsx | 3 +-
.../radio-group-card-with-children.tsx | 2 +-
.../default/example/radio-group-demo.tsx | 3 +-
.../default/example/radio-group-form.tsx | 3 +-
.../example/radio-group-stacked-form.tsx | 3 +-
.../default/example/scroll-area-demo.tsx | 4 +-
.../example/scroll-area-horizontal-demo.tsx | 3 +-
.../registry/default/example/select-demo.tsx | 1 -
.../registry/default/example/select-form.tsx | 3 +-
.../registry/default/example/slider-demo.tsx | 3 +-
.../default/example/slider-minMax-range.tsx | 3 +-
.../registry/default/example/switch-demo.tsx | 3 +-
.../registry/default/example/switch-form.tsx | 3 +-
.../registry/default/example/table-sort.tsx | 3 +-
.../registry/default/example/tabs-demo.tsx | 20 ++++++--
...text-confirm-dialog-with-cancel-button.tsx | 1 -
.../text-confirm-dialog-with-children.tsx | 1 -
.../example/text-confirm-dialog-with-size.tsx | 1 -
.../default/example/textarea-form.tsx | 3 +-
.../default/example/textarea-with-button.tsx | 3 +-
.../default/example/textarea-with-label.tsx | 3 +-
.../default/example/textarea-with-text.tsx | 3 +-
.../registry/default/example/toc-demo.tsx | 5 +-
.../default/example/toc-single-demo.tsx | 5 +-
.../registry/default/example/toggle-demo.tsx | 1 -
.../default/example/toggle-disabled.tsx | 1 -
.../default/example/toggle-group-demo.tsx | 1 -
.../default/example/toggle-group-disabled.tsx | 1 -
.../default/example/toggle-group-lg.tsx | 1 -
.../default/example/toggle-group-outline.tsx | 1 -
.../default/example/toggle-group-single.tsx | 1 -
.../default/example/toggle-group-sm.tsx | 1 -
.../registry/default/example/toggle-lg.tsx | 1 -
.../registry/default/example/toggle-sm.tsx | 1 -
.../default/example/toggle-with-text.tsx | 1 -
.../default/example/tree-view-demo.tsx | 2 +-
.../default/example/tree-view-directories.tsx | 2 +-
apps/design-system/registry/registry.ts | 4 +-
.../app/(app)/docs/[[...slug]]/page.tsx | 16 ++++---
apps/ui-library/app/(app)/layout.tsx | 2 +-
apps/ui-library/app/(app)/page.tsx | 5 +-
.../app/(app)/telemetry-wrapper.tsx | 3 +-
apps/ui-library/app/Providers.tsx | 4 +-
apps/ui-library/app/SonnerToast.tsx | 3 +-
.../app/example/infinite-list-demo/layout.tsx | 1 +
.../example/password-based-auth/layout.tsx | 1 +
.../password-based-auth/protected/page.tsx | 3 +-
.../realtime-avatar-stack-demo/layout.tsx | 1 +
.../app/example/realtime-chat-demo/layout.tsx | 1 +
.../example/realtime-cursor-demo/layout.tsx | 1 +
.../app/example/social-auth/layout.tsx | 3 +-
apps/ui-library/app/layout.tsx | 4 +-
.../ui-library/components/block-item-code.tsx | 5 +-
apps/ui-library/components/block-item.tsx | 4 +-
.../components/command-copy-button.tsx | 2 +-
apps/ui-library/components/command-menu.tsx | 6 +--
apps/ui-library/components/command.tsx | 1 +
.../components/component-preview.tsx | 7 ++-
apps/ui-library/components/copy-button.tsx | 1 -
.../components/framework-selector.tsx | 6 +--
apps/ui-library/components/mdx-components.tsx | 4 +-
.../components/mobile-menu-sheet.tsx | 3 +-
.../components/open-in-v0-button.tsx | 3 +-
apps/ui-library/components/registry-block.tsx | 3 +-
.../components/side-navigation-item.tsx | 2 +-
.../ui-library/components/side-navigation.tsx | 4 +-
apps/ui-library/components/sidebar.tsx | 4 +-
apps/ui-library/components/source-panel.tsx | 8 ++--
apps/ui-library/components/tanstack-beta.tsx | 1 +
.../components/theme-switcher-dropdown.tsx | 3 +-
apps/ui-library/components/toc.tsx | 2 +-
.../components/use-local-storage.tsx | 1 -
.../content/docs/infinite-query-hook.mdx | 7 +--
.../content/docs/nextjs/realtime-cursor.mdx | 1 +
.../content/docs/nuxtjs/dropzone.mdx | 2 +-
.../content/docs/platform/platform-kit.mdx | 5 +-
apps/ui-library/content/docs/vue/client.mdx | 1 +
apps/ui-library/content/docs/vue/dropzone.mdx | 2 +-
.../content/docs/vue/password-based-auth.mdx | 1 +
apps/ui-library/contentlayer.config.js | 2 +-
apps/ui-library/context/framework-context.tsx | 3 +-
.../context/mobile-menu-context.tsx | 3 +-
apps/ui-library/hooks/use-config.ts | 3 +-
apps/ui-library/lib/telemetry.ts | 4 +-
apps/ui-library/lib/toc.ts | 1 -
.../public/r/current-user-avatar-nextjs.json | 4 +-
.../r/current-user-avatar-react-router.json | 4 +-
.../public/r/current-user-avatar-react.json | 4 +-
.../r/current-user-avatar-tanstack.json | 4 +-
apps/ui-library/public/r/dropzone-nextjs.json | 4 +-
apps/ui-library/public/r/dropzone-nuxtjs.json | 4 +-
.../public/r/dropzone-react-router.json | 4 +-
apps/ui-library/public/r/dropzone-react.json | 4 +-
.../public/r/dropzone-tanstack.json | 4 +-
apps/ui-library/public/r/dropzone-vue.json | 2 +-
.../public/r/infinite-query-hook.json | 2 +-
.../public/r/password-based-auth-nextjs.json | 14 +++---
.../r/password-based-auth-react-router.json | 16 +++----
.../public/r/password-based-auth-react.json | 8 ++--
.../r/password-based-auth-tanstack.json | 26 +++++-----
.../public/r/platform-kit-nextjs.json | 46 +++++++++---------
.../r/realtime-avatar-stack-nextjs.json | 10 ++--
.../r/realtime-avatar-stack-react-router.json | 10 ++--
.../public/r/realtime-avatar-stack-react.json | 10 ++--
.../r/realtime-avatar-stack-tanstack.json | 10 ++--
.../public/r/realtime-chat-nextjs.json | 4 +-
.../public/r/realtime-chat-react-router.json | 4 +-
.../public/r/realtime-chat-react.json | 4 +-
.../public/r/realtime-chat-tanstack.json | 4 +-
.../public/r/realtime-cursor-nextjs.json | 4 +-
.../public/r/realtime-cursor-nuxtjs.json | 6 +--
.../r/realtime-cursor-react-router.json | 4 +-
.../public/r/realtime-cursor-react.json | 4 +-
.../public/r/realtime-cursor-tanstack.json | 4 +-
.../public/r/realtime-cursor-vue.json | 6 +--
.../public/r/social-auth-nextjs.json | 8 ++--
.../public/r/social-auth-react-router.json | 10 ++--
.../public/r/social-auth-react.json | 2 +-
.../public/r/social-auth-tanstack.json | 12 ++---
apps/ui-library/registry/blocks.ts | 12 ++---
apps/ui-library/registry/clients.ts | 1 +
.../hooks/use-current-user-image.ts | 3 +-
.../hooks/use-current-user-name.ts | 3 +-
.../blocks/dropzone/components/dropzone.tsx | 5 +-
.../dropzone/hooks/use-supabase-upload.ts | 5 +-
.../hooks/use-infinite-query.ts | 3 +-
.../app/auth/confirm/route.ts | 3 +-
.../components/forgot-password-form.tsx | 3 +-
.../components/login-form.tsx | 5 +-
.../components/logout-button.tsx | 3 +-
.../components/sign-up-form.tsx | 5 +-
.../components/update-password-form.tsx | 5 +-
.../password-based-auth-nextjs/middleware.ts | 3 +-
.../app/routes/auth.confirm.tsx | 5 +-
.../app/routes/auth.error.tsx | 3 +-
.../app/routes/forgot-password.tsx | 17 +++----
.../app/routes/login.tsx | 3 +-
.../app/routes/logout.tsx | 3 +-
.../app/routes/protected.tsx | 3 +-
.../app/routes/sign-up.tsx | 3 +-
.../app/routes/update-password.tsx | 3 +-
.../components/forgot-password-form.tsx | 3 +-
.../components/login-form.tsx | 3 +-
.../components/sign-up-form.tsx | 3 +-
.../components/update-password-form.tsx | 3 +-
.../components/forgot-password-form.tsx | 5 +-
.../components/login-form.tsx | 5 +-
.../components/sign-up-form.tsx | 5 +-
.../components/update-password-form.tsx | 5 +-
.../lib/supabase/fetch-user-server-fn.ts | 4 +-
.../routeTree.gen.ts | 5 --
.../routes/_protected.tsx | 3 +-
.../routes/auth/confirm.ts | 3 +-
.../routes/auth/error.tsx | 3 +-
.../routes/forgot-password.tsx | 3 +-
.../routes/login.tsx | 3 +-
.../routes/sign-up-success.tsx | 3 +-
.../routes/sign-up.tsx | 3 +-
.../routes/update-password.tsx | 3 +-
.../components/avatar-stack.tsx | 5 +-
.../components/realtime-avatar-stack.tsx | 3 +-
.../hooks/use-realtime-presence-room.ts | 5 +-
.../components/realtime-chat.tsx | 7 +--
.../realtime-chat/hooks/use-realtime-chat.tsx | 3 +-
.../realtime-cursor/components/cursor.tsx | 3 +-
.../hooks/use-realtime-cursors.ts | 5 +-
.../app/auth/oauth/route.ts | 1 +
.../components/login-form.tsx | 3 +-
.../components/logout-button.tsx | 3 +-
.../blocks/social-auth-nextjs/middleware.ts | 3 +-
.../app/routes/auth.error.tsx | 3 +-
.../app/routes/auth.oauth.tsx | 3 +-
.../app/routes/login.tsx | 3 +-
.../app/routes/logout.tsx | 3 +-
.../app/routes/protected.tsx | 3 +-
.../components/login-form.tsx | 3 +-
.../components/login-form.tsx | 3 +-
.../lib/supabase/fetch-user-server-fn.ts | 4 +-
.../social-auth-tanstack/routeTree.gen.ts | 6 ---
.../routes/_protected.tsx | 3 +-
.../routes/auth/error.tsx | 3 +-
.../social-auth-tanstack/routes/auth/oauth.ts | 3 +-
.../social-auth-tanstack/routes/login.tsx | 3 +-
.../registry/default/components/ui/alert.tsx | 2 +-
.../registry/default/components/ui/badge.tsx | 2 +-
.../default/components/ui/command.tsx | 2 +-
.../registry/default/components/ui/dialog.tsx | 2 +-
.../registry/default/components/ui/form.tsx | 2 +-
.../default/components/ui/hover-card.tsx | 2 +-
.../registry/default/components/ui/label.tsx | 2 +-
.../default/components/ui/popover.tsx | 2 +-
.../default/components/ui/progress.tsx | 2 +-
.../registry/default/components/ui/select.tsx | 2 +-
.../registry/default/components/ui/switch.tsx | 2 +-
.../default/components/ui/toggle-group.tsx | 2 +-
.../registry/default/components/ui/toggle.tsx | 2 +-
.../examples/current-user-avatar-demo.tsx | 3 +-
.../examples/current-user-avatar-preview.tsx | 1 -
.../examples/infinite-query-hook-demo.tsx | 3 +-
.../examples/realtime-avatar-stack-demo.tsx | 7 +--
.../realtime-avatar-stack-preview.tsx | 3 +-
.../default/examples/realtime-chat-demo.tsx | 3 +-
.../default/examples/realtime-cursor-demo.tsx | 7 +--
.../default/fixtures/lib/supabase/client.ts | 2 +
.../app/api/ai/sql/route.ts | 5 +-
.../components/dynamic-form.tsx | 5 +-
.../components/results-table.tsx | 2 +-
.../components/sql-editor.tsx | 37 ++++++++-------
.../components/supabase-manager/auth.tsx | 25 +++++-----
.../components/supabase-manager/database.tsx | 19 ++++----
.../components/supabase-manager/index.tsx | 47 ++++++++++---------
.../components/supabase-manager/logs.tsx | 9 ++--
.../components/supabase-manager/secrets.tsx | 13 ++---
.../components/supabase-manager/storage.tsx | 9 ++--
.../supabase-manager/suggestions.tsx | 8 ++--
.../components/supabase-manager/users.tsx | 3 +-
.../components/users-growth-chart.tsx | 7 +--
.../contexts/SheetNavigationContext.tsx | 2 +-
.../platform-kit-nextjs/hooks/use-auth.ts | 5 +-
.../platform-kit-nextjs/hooks/use-logs.ts | 3 +-
.../hooks/use-run-query.ts | 3 +-
.../platform-kit-nextjs/hooks/use-secrets.ts | 5 +-
.../platform-kit-nextjs/hooks/use-storage.ts | 3 +-
.../hooks/use-suggestions.ts | 3 +-
.../platform-kit-nextjs/hooks/use-tables.ts | 5 +-
.../hooks/use-user-counts.ts | 1 +
.../platform-kit-nextjs/lib/management-api.ts | 1 +
apps/ui-library/registry/index.ts | 4 +-
apps/ui-library/registry/utils.ts | 1 +
package.json | 2 +-
packages/ai-commands/src/docs.ts | 1 +
packages/ai-commands/src/sql/cron.ts | 5 +-
packages/ai-commands/src/sql/functions.ts | 1 +
packages/ai-commands/test/extensions.ts | 2 +-
packages/ai-commands/vitest.config.ts | 1 -
packages/ai-commands/vitest.setup.ts | 3 +-
packages/api-types/index.ts | 7 +--
packages/common/auth.tsx | 1 +
packages/common/configcat.test.ts | 1 +
packages/common/consent-state.ts | 1 +
packages/common/enabled-features/index.ts | 1 +
packages/common/feature-flags.tsx | 2 +-
packages/common/hooks/useConstant.ts | 1 -
packages/common/hooks/useDebounce.tsx | 2 +-
packages/common/hooks/useEffectEvent.ts | 1 +
packages/common/hooks/useTelemetryCookie.tsx | 1 +
packages/common/hooks/useThemeSandbox.tsx | 1 +
packages/common/posthog-client.ts | 3 +-
packages/common/telemetry-utils.ts | 3 +-
packages/common/telemetry.tsx | 3 +-
packages/generator/helpers.ts | 2 +-
packages/generator/tsdoc.ts | 7 +--
packages/icons/README.md | 2 +-
packages/icons/src/createSupabaseIcon.ts | 7 +--
packages/pg-meta/src/index.ts | 22 ++++-----
.../pg-meta/src/pg-meta-column-privileges.ts | 7 +--
packages/pg-meta/src/pg-meta-columns.ts | 3 +-
packages/pg-meta/src/pg-meta-config.ts | 1 +
packages/pg-meta/src/pg-meta-extensions.ts | 3 +-
.../pg-meta/src/pg-meta-foreign-tables.ts | 1 +
packages/pg-meta/src/pg-meta-functions.ts | 3 +-
packages/pg-meta/src/pg-meta-indexes.ts | 5 +-
.../pg-meta/src/pg-meta-materialized-views.ts | 9 ++--
packages/pg-meta/src/pg-meta-policies.ts | 3 +-
packages/pg-meta/src/pg-meta-publications.ts | 3 +-
packages/pg-meta/src/pg-meta-roles.ts | 3 +-
packages/pg-meta/src/pg-meta-schemas.ts | 5 +-
.../pg-meta/src/pg-meta-table-privileges.ts | 7 +--
packages/pg-meta/src/pg-meta-tables.ts | 1 +
packages/pg-meta/src/pg-meta-triggers.ts | 3 +-
packages/pg-meta/src/pg-meta-types.ts | 1 +
packages/pg-meta/src/pg-meta-version.ts | 1 +
packages/pg-meta/src/pg-meta-views.ts | 9 ++--
packages/pg-meta/src/query/QueryAction.ts | 2 +-
packages/pg-meta/src/query/QueryModifier.ts | 2 +-
.../pg-meta/src/sql/studio/get-users-count.ts | 6 +--
.../pg-meta/test/column-privileges.test.ts | 5 +-
packages/pg-meta/test/columns.test.ts | 5 +-
packages/pg-meta/test/config.test.ts | 5 +-
packages/pg-meta/test/db/utils.ts | 2 +-
packages/pg-meta/test/extensions.test.ts | 5 +-
packages/pg-meta/test/foreign-tables.test.ts | 1 +
packages/pg-meta/test/functions.test.ts | 5 +-
packages/pg-meta/test/indexes.test.ts | 5 +-
.../pg-meta/test/materialized-views.test.ts | 5 +-
packages/pg-meta/test/pg-format.test.ts | 1 +
packages/pg-meta/test/policies.test.ts | 6 +--
packages/pg-meta/test/publications.test.ts | 5 +-
.../pg-meta/test/query/advanced-query.test.ts | 1 +
packages/pg-meta/test/query/query.test.ts | 1 +
.../test/query/table-row-query.test.ts | 1 +
packages/pg-meta/test/roles.test.ts | 5 +-
packages/pg-meta/test/schemas.test.ts | 5 +-
.../test/sql/studio/get-users-common.test.ts | 3 +-
.../test/sql/studio/get-users-count.test.ts | 7 +--
.../sql/studio/get-users-paginated.test.ts | 7 +--
.../pg-meta/test/table-privileges.test.ts | 5 +-
packages/pg-meta/test/tables.test.ts | 1 +
packages/pg-meta/test/triggers.test.ts | 5 +-
packages/pg-meta/test/types.test.ts | 5 +-
packages/pg-meta/test/version.test.ts | 5 +-
packages/pg-meta/test/views.test.ts | 5 +-
packages/shared-data/index.ts | 2 +-
.../AssistantCommandsPopover.tsx | 2 +-
.../src/AuthenticatedDropdownMenu/index.tsx | 13 +++--
.../src/Banners/AnnouncementBanner.tsx | 3 +-
.../ui-patterns/src/Banners/Countdown.tsx | 1 +
.../ui-patterns/src/Banners/LW15Banner.tsx | 3 +-
packages/ui-patterns/src/Banners/index.ts | 2 +-
.../src/Chart/charts/chart-bar.tsx | 10 ++--
.../src/Chart/charts/chart-line.tsx | 10 ++--
.../src/CommandMenu/api/Badges.tsx | 1 -
.../src/CommandMenu/api/CommandInput.tsx | 5 +-
.../src/CommandMenu/api/CommandList.tsx | 3 +-
.../src/CommandMenu/api/CommandMenu.tsx | 8 ++--
.../src/CommandMenu/api/CommandProvider.tsx | 4 +-
.../CommandMenu/api/hooks/commandsHooks.ts | 4 +-
.../src/CommandMenu/api/hooks/pagesHooks.ts | 2 +-
.../api/hooks/useCommandMenuTelemetry.ts | 10 ++--
.../hooks/useCommandMenuTelemetryContext.tsx | 1 +
.../src/CommandMenu/internal/Command.tsx | 9 ++--
.../src/CommandMenu/internal/CommandEmpty.tsx | 3 +-
.../src/CommandMenu/internal/CommandGroup.tsx | 3 +-
.../src/CommandMenu/internal/Context.tsx | 2 +-
.../internal/state/commandsState.ts | 3 +-
.../internal/state/commandsStates.test.ts | 4 +-
.../internal/state/pagesState.test.ts | 2 +-
.../CommandMenu/internal/state/pagesState.ts | 1 +
.../CommandMenu/internal/state/viewState.ts | 3 +-
.../src/CommandMenu/prepackaged/Changelog.tsx | 2 +-
.../prepackaged/DocsAi/DocsAiPage.tsx | 5 +-
.../CommandMenu/prepackaged/DocsAi/index.tsx | 2 +-
.../prepackaged/DocsSearch/DocsSearchPage.tsx | 9 ++--
.../src/CommandMenu/prepackaged/Support.tsx | 4 +-
.../CommandMenu/prepackaged/ThemeSwitcher.tsx | 8 ++--
.../CommandMenu/prepackaged/ai/AiWarning.tsx | 1 -
.../src/CommandMenu/prepackaged/ai/queryAi.ts | 2 +-
.../prepackaged/ai/useAiChat.test.ts | 3 +-
.../src/ComplexTabs/withSticky.tsx | 3 +-
.../ui-patterns/src/ComputeBadge/index.tsx | 4 +-
.../ui-patterns/src/ConsentToast/index.tsx | 1 +
.../ui-patterns/src/CountdownWidget/index.tsx | 1 +
packages/ui-patterns/src/DataInputs/Input.tsx | 3 +-
.../src/Dialogs/ConfirmationModal.tsx | 5 +-
.../src/Dialogs/TextConfirmModal.tsx | 9 ++--
.../src/EmptyStatePresentational/index.tsx | 1 -
.../ui-patterns/src/ExpandableVideo/index.tsx | 4 +-
.../src/FilterBar/DefaultCommandList.tsx | 1 +
.../src/FilterBar/FilterCondition.tsx | 4 +-
.../ui-patterns/src/FilterBar/FilterGroup.tsx | 4 +-
.../ui-patterns/src/FilterBar/hooks.test.ts | 5 +-
.../ui-patterns/src/FilterBar/useAIFilter.ts | 3 +-
.../src/FilterBar/useCommandMenu.ts | 8 ++--
packages/ui-patterns/src/FilterBar/utils.ts | 2 +-
.../ui-patterns/src/InnerSideMenu/index.tsx | 5 +-
.../src/McpUrlBuilder/McpConfigPanel.tsx | 4 +-
.../components/ClientSelectDropdown.tsx | 6 +--
.../components/McpConfigurationDisplay.tsx | 5 +-
.../components/McpConfigurationOptions.tsx | 1 +
.../src/McpUrlBuilder/constants.tsx | 1 +
packages/ui-patterns/src/MetricCard/index.tsx | 2 +-
.../MultiSelectDeprecated/MultiSelectV2.tsx | 7 +--
.../src/MultiSelectDeprecated/index.tsx | 2 +-
.../ui-patterns/src/PageContainer/index.tsx | 1 -
packages/ui-patterns/src/PageHeader/index.tsx | 2 +-
.../ui-patterns/src/PageSection/index.tsx | 1 -
packages/ui-patterns/src/PopupFrame/index.tsx | 2 +-
.../ui-patterns/src/PrivacySettings/index.tsx | 4 +-
.../ui-patterns/src/PromoToast/PromoToast.tsx | 2 +
packages/ui-patterns/src/Row/index.tsx | 1 +
.../ui-patterns/src/SqlToRest/assumptions.ts | 1 +
.../src/SqlToRest/base-url-dialog.tsx | 1 +
packages/ui-patterns/src/SqlToRest/faqs.ts | 3 +-
packages/ui-patterns/src/SqlToRest/index.tsx | 1 +
.../ui-patterns/src/SqlToRest/sql-to-rest.tsx | 13 ++---
.../syntax-highlighter/framer-features.ts | 1 +
.../syntax-highlighter/transform-renderer.tsx | 2 +-
packages/ui-patterns/src/ThemeToggle.tsx | 2 +-
.../ui-patterns/src/TimestampInfo/index.tsx | 4 +-
packages/ui-patterns/src/Toc/index.ts | 7 ++-
.../src/Toc/mdx-plugins/remark-heading.ts | 3 +-
.../ui-patterns/src/Toc/server/get-toc.tsx | 3 +-
.../ui-patterns/src/Toc/toc-primitive.tsx | 6 +--
packages/ui-patterns/src/Toc/toc-thumb.tsx | 5 +-
packages/ui-patterns/src/Toc/toc.tsx | 3 +-
packages/ui-patterns/src/consent.tsx | 1 +
.../form/FormItemLayout/FormItemLayout.tsx | 1 +
packages/ui-patterns/src/form/FormLayout2.tsx | 1 +
.../src/form/Layout/FormLayout.tsx | 2 +-
.../src/multi-select/multi-select.test.tsx | 7 +--
.../src/multi-select/multi-select.tsx | 6 +--
packages/ui-patterns/vitest.setup.ts | 2 +-
.../ui/src/components/Accordion/Accordion.tsx | 2 +-
packages/ui/src/components/Alert/Alert.tsx | 2 +-
.../AnimatedCounter/AnimatedCounter.tsx | 3 +-
.../src/components/Breadcrumb/Breadcrumb.tsx | 1 +
packages/ui/src/components/Button/Button.tsx | 3 +-
packages/ui/src/components/Checkbox/index.tsx | 1 +
.../components/Collapsible/Collapsible.tsx | 1 +
.../components/CustomHTMLElements/Heading.tsx | 3 +-
.../components/ExpandingTextArea/index.tsx | 1 +
packages/ui/src/components/Form/Form.tsx | 3 +-
packages/ui/src/components/Icon/IconBase.tsx | 1 +
.../Icon/icons/IconPresence/IconPresence.tsx | 1 +
packages/ui/src/components/Image/Image.tsx | 9 ++--
packages/ui/src/components/Input/Input.tsx | 4 +-
packages/ui/src/components/InputOld/Input.js | 3 +-
.../ui/src/components/Listbox/Listbox2.tsx | 2 +-
packages/ui/src/components/Listbox/index.tsx | 1 +
.../ui/src/components/Loading/Loading.tsx | 3 +-
packages/ui/src/components/Menu/Menu.tsx | 1 +
.../ui/src/components/Mermaid/Mermaid.tsx | 3 +-
packages/ui/src/components/Modal/Modal.tsx | 5 +-
packages/ui/src/components/NavMenu/index.tsx | 3 +-
.../ui/src/components/Popover/Popover.tsx | 2 +-
.../src/components/PrePostTab/PrePostTab.tsx | 3 +-
packages/ui/src/components/Radio/index.tsx | 1 +
packages/ui/src/components/RadioOld/Radio.js | 3 +-
packages/ui/src/components/Select/index.tsx | 1 +
.../src/components/ShadowScrollArea/index.tsx | 2 +
.../ui/src/components/SidePanel/SidePanel.tsx | 1 +
.../SimpleCodeBlock/SimpleCodeBlock.tsx | 5 +-
packages/ui/src/components/Space/Space.tsx | 1 +
packages/ui/src/components/StatusIcon.tsx | 5 +-
packages/ui/src/components/Tabs/Tabs.tsx | 1 +
.../ui/src/components/Tabs/TabsProvider.tsx | 6 +--
.../ui/src/components/TextLink/TextLink.tsx | 3 +-
.../ThemeProvider/ThemeProvider.tsx | 1 +
.../ui/src/components/TreeView/TreeView.tsx | 1 +
.../ui/src/components/Typography/Link.tsx | 1 +
.../ui/src/components/Typography/Text.tsx | 1 +
.../ui/src/components/Typography/Title.tsx | 1 +
.../src/components/Typography/Typography.tsx | 7 +--
.../ui/src/components/Typography/index.tsx | 1 +
.../ui/src/components/radio-group-stacked.tsx | 2 +-
.../src/components/shadcn/ui/alert-dialog.tsx | 2 +-
.../src/components/shadcn/ui/breadcrumb.tsx | 1 +
.../src/components/shadcn/ui/button-group.tsx | 1 +
.../ui/src/components/shadcn/ui/command.tsx | 2 +-
.../ui/src/components/shadcn/ui/dialog.tsx | 2 +-
.../ui/src/components/shadcn/ui/field.tsx | 2 +-
packages/ui/src/components/shadcn/ui/form.tsx | 2 +-
.../ui/src/components/shadcn/ui/input.tsx | 3 +-
.../ui/src/components/shadcn/ui/resizable.tsx | 2 +-
.../ui/src/components/shadcn/ui/select.tsx | 2 +-
.../ui/src/components/shadcn/ui/sheet.tsx | 2 +-
.../ui/src/components/shadcn/ui/sidebar.tsx | 3 +-
.../components/shadcn/ui/sonner-progress.tsx | 1 +
.../ui/src/components/shadcn/ui/switch.tsx | 2 +-
.../src/components/shadcn/ui/toggle-group.tsx | 2 +-
.../ai-icon-animation/ai-icon-animation.tsx | 3 +-
.../ui/src/layout/banners/Announcement.tsx | 7 ++-
.../src/lib/Layout/FormLayout/FormLayout.tsx | 2 +
packages/ui/src/lib/Layout/InputErrorIcon.tsx | 3 +-
.../ui/src/lib/Layout/InputIconContainer.tsx | 1 +
packages/ui/src/lib/Markdown/index.tsx | 3 +-
packages/ui/src/lib/Overlay/Overlay.tsx | 8 ++--
packages/ui/src/lib/commonCva.ts | 2 +-
packages/ui/src/lib/theme/styleHandler.ts | 3 +-
packages/ui/src/lib/theme/themeContext.tsx | 6 +--
packages/ui/vitest.setup.ts | 2 +-
641 files changed, 1505 insertions(+), 1282 deletions(-)
diff --git a/apps/cms/scripts/migrate.ts b/apps/cms/scripts/migrate.ts
index 5d3a12c11e772..f0b0d17c9d6f4 100644
--- a/apps/cms/scripts/migrate.ts
+++ b/apps/cms/scripts/migrate.ts
@@ -1,4 +1,5 @@
import payload from 'payload'
+
// Use a minimal config for migrations to avoid importing the full app graph during build
import payloadConfig from '../src/payload.migrate.config.ts'
diff --git a/apps/cms/src/access/isAdmin.ts b/apps/cms/src/access/isAdmin.ts
index 5e1261e26fb70..cb8123e95fb67 100644
--- a/apps/cms/src/access/isAdmin.ts
+++ b/apps/cms/src/access/isAdmin.ts
@@ -1,4 +1,5 @@
import type { AccessArgs, FieldAccess } from 'payload'
+
import type { User } from '../payload-types'
type isAdmin = (args: AccessArgs) => boolean
diff --git a/apps/cms/src/blocks/Banner/Component.tsx b/apps/cms/src/blocks/Banner/Component.tsx
index c395d6878014b..ec5fd59dcac3c 100644
--- a/apps/cms/src/blocks/Banner/Component.tsx
+++ b/apps/cms/src/blocks/Banner/Component.tsx
@@ -1,8 +1,8 @@
-import type { BannerBlock as BannerBlockProps } from '@/payload-types'
-
-import { cn } from '@/utilities/ui'
import React from 'react'
+
import RichText from '@/components/RichText'
+import type { BannerBlock as BannerBlockProps } from '@/payload-types'
+import { cn } from '@/utilities/ui'
type Props = {
className?: string
diff --git a/apps/cms/src/blocks/Banner/config.ts b/apps/cms/src/blocks/Banner/config.ts
index 53e46b5cbc4ed..5bfdc1aa1a371 100644
--- a/apps/cms/src/blocks/Banner/config.ts
+++ b/apps/cms/src/blocks/Banner/config.ts
@@ -1,10 +1,9 @@
-import type { Block } from 'payload'
-
import {
FixedToolbarFeature,
InlineToolbarFeature,
lexicalEditor,
} from '@payloadcms/richtext-lexical'
+import type { Block } from 'payload'
export const Banner: Block = {
slug: 'banner',
diff --git a/apps/cms/src/blocks/Code/Component.client.tsx b/apps/cms/src/blocks/Code/Component.client.tsx
index fc8fb62545a74..93901f5220614 100644
--- a/apps/cms/src/blocks/Code/Component.client.tsx
+++ b/apps/cms/src/blocks/Code/Component.client.tsx
@@ -1,6 +1,8 @@
'use client'
+
import { Highlight, themes } from 'prism-react-renderer'
import React from 'react'
+
import { CopyButton } from './CopyButton'
type Props = {
diff --git a/apps/cms/src/blocks/Code/CopyButton.tsx b/apps/cms/src/blocks/Code/CopyButton.tsx
index 546148fa740d1..3af833cb68dfe 100644
--- a/apps/cms/src/blocks/Code/CopyButton.tsx
+++ b/apps/cms/src/blocks/Code/CopyButton.tsx
@@ -1,8 +1,10 @@
'use client'
-import { Button } from '@/components/ui/button'
+
import { CopyIcon } from '@payloadcms/ui/icons/Copy'
import { useState } from 'react'
+import { Button } from '@/components/ui/button'
+
export function CopyButton({ code }: { code: string }) {
const [text, setText] = useState('Copy')
diff --git a/apps/cms/src/blocks/MediaBlock/Component.tsx b/apps/cms/src/blocks/MediaBlock/Component.tsx
index 013fd87f849ff..21ed856bd2dfd 100644
--- a/apps/cms/src/blocks/MediaBlock/Component.tsx
+++ b/apps/cms/src/blocks/MediaBlock/Component.tsx
@@ -1,12 +1,10 @@
import type { StaticImageData } from 'next/image'
-
-import { cn } from '@/utilities/ui'
import React from 'react'
-import RichText from '@/components/RichText'
-
-import type { MediaBlock as MediaBlockProps } from '@/payload-types'
import { Media } from '../../components/Media'
+import RichText from '@/components/RichText'
+import type { MediaBlock as MediaBlockProps } from '@/payload-types'
+import { cn } from '@/utilities/ui'
type Props = MediaBlockProps & {
breakout?: boolean
diff --git a/apps/cms/src/blocks/Quote/Component.tsx b/apps/cms/src/blocks/Quote/Component.tsx
index 1689a82a535d5..0bf925e951814 100644
--- a/apps/cms/src/blocks/Quote/Component.tsx
+++ b/apps/cms/src/blocks/Quote/Component.tsx
@@ -1,7 +1,7 @@
-import type { QuoteBlock as QuoteBlockProps } from '@/payload-types'
-
import React from 'react'
+import type { QuoteBlock as QuoteBlockProps } from '@/payload-types'
+
type Props = {
className?: string
} & QuoteBlockProps
diff --git a/apps/cms/src/blocks/YouTube/Component.tsx b/apps/cms/src/blocks/YouTube/Component.tsx
index 2d903a2a6ca17..f0c389bc39d27 100644
--- a/apps/cms/src/blocks/YouTube/Component.tsx
+++ b/apps/cms/src/blocks/YouTube/Component.tsx
@@ -1,7 +1,7 @@
-import type { YouTubeBlock as YouTubeBlockProps } from '@/payload-types'
+import React from 'react'
+import type { YouTubeBlock as YouTubeBlockProps } from '@/payload-types'
import { cn } from '@/utilities/ui'
-import React from 'react'
type Props = {
className?: string
diff --git a/apps/cms/src/collections/Categories.ts b/apps/cms/src/collections/Categories.ts
index d5b20b6d0e384..e9dbfc9d3829c 100644
--- a/apps/cms/src/collections/Categories.ts
+++ b/apps/cms/src/collections/Categories.ts
@@ -1,4 +1,5 @@
import type { CollectionConfig } from 'payload'
+
import { isAdmin } from '../access/isAdmin'
export const Categories: CollectionConfig = {
diff --git a/apps/cms/src/collections/Customers/index.ts b/apps/cms/src/collections/Customers/index.ts
index 56bf14bf3187c..9e1f2e47abf66 100644
--- a/apps/cms/src/collections/Customers/index.ts
+++ b/apps/cms/src/collections/Customers/index.ts
@@ -1,5 +1,10 @@
-import type { CollectionConfig } from 'payload'
-
+import {
+ MetaDescriptionField,
+ MetaImageField,
+ MetaTitleField,
+ OverviewField,
+ PreviewField,
+} from '@payloadcms/plugin-seo/fields'
import {
BlocksFeature,
FixedToolbarFeature,
@@ -8,26 +13,18 @@ import {
InlineToolbarFeature,
lexicalEditor,
} from '@payloadcms/richtext-lexical'
+import type { CollectionConfig } from 'payload'
import { isAnyone } from '../../access/isAnyone.ts'
import { isAuthenticated } from '../../access/isAuthenticated.ts'
-
import { Banner } from '../../blocks/Banner/config.ts'
import { Code } from '../../blocks/Code/config.ts'
import { MediaBlock } from '../../blocks/MediaBlock/config.ts'
import { Quote } from '../../blocks/Quote/config.ts'
import { YouTube } from '../../blocks/YouTube/config.ts'
-import { revalidateDelete, revalidateCustomer } from './hooks/revalidateCustomer.ts'
-
-import {
- MetaDescriptionField,
- MetaImageField,
- MetaTitleField,
- OverviewField,
- PreviewField,
-} from '@payloadcms/plugin-seo/fields'
import { slugField } from '../../fields/slug/index.ts'
import { WWW_SITE_ORIGIN } from '../../utilities/constants.ts'
+import { revalidateCustomer, revalidateDelete } from './hooks/revalidateCustomer.ts'
const industryOptions = [
{ label: 'Healthcare', value: 'healthcare' },
diff --git a/apps/cms/src/collections/Events/index.ts b/apps/cms/src/collections/Events/index.ts
index de909c08e8cac..1f3896b5e3a8d 100644
--- a/apps/cms/src/collections/Events/index.ts
+++ b/apps/cms/src/collections/Events/index.ts
@@ -1,5 +1,10 @@
-import type { CollectionConfig } from 'payload'
-
+import {
+ MetaDescriptionField,
+ MetaImageField,
+ MetaTitleField,
+ OverviewField,
+ PreviewField,
+} from '@payloadcms/plugin-seo/fields'
import {
BlocksFeature,
FixedToolbarFeature,
@@ -8,27 +13,19 @@ import {
InlineToolbarFeature,
lexicalEditor,
} from '@payloadcms/richtext-lexical'
+import type { CollectionConfig } from 'payload'
import { isAnyone } from '../../access/isAnyone.ts'
import { isAuthenticated } from '../../access/isAuthenticated.ts'
-
import { Banner } from '../../blocks/Banner/config.ts'
import { Code } from '../../blocks/Code/config.ts'
import { MediaBlock } from '../../blocks/MediaBlock/config.ts'
import { Quote } from '../../blocks/Quote/config.ts'
import { YouTube } from '../../blocks/YouTube/config.ts'
-import { revalidateDelete, revalidateEvent } from './hooks/revalidateEvent.ts'
-
-import {
- MetaDescriptionField,
- MetaImageField,
- MetaTitleField,
- OverviewField,
- PreviewField,
-} from '@payloadcms/plugin-seo/fields'
import { slugField } from '../../fields/slug/index.ts'
-import { timezoneOptions } from '../../utilities/timezones.ts'
import { WWW_SITE_ORIGIN } from '../../utilities/constants.ts'
+import { timezoneOptions } from '../../utilities/timezones.ts'
+import { revalidateDelete, revalidateEvent } from './hooks/revalidateEvent.ts'
const eventTypeOptions = [
{ label: 'Conference', value: 'conference' },
diff --git a/apps/cms/src/collections/Media.ts b/apps/cms/src/collections/Media.ts
index 9b8f9c70ae802..2d29b0ac2a444 100644
--- a/apps/cms/src/collections/Media.ts
+++ b/apps/cms/src/collections/Media.ts
@@ -1,9 +1,9 @@
-import type { CollectionConfig } from 'payload'
import {
FixedToolbarFeature,
InlineToolbarFeature,
lexicalEditor,
} from '@payloadcms/richtext-lexical'
+import type { CollectionConfig } from 'payload'
import { isAnyone } from '../access/isAnyone.ts'
import { isAuthenticated } from '../access/isAuthenticated.ts'
diff --git a/apps/cms/src/collections/Posts/hooks/populateAuthors.ts b/apps/cms/src/collections/Posts/hooks/populateAuthors.ts
index 6a57e36534af1..8d854d65d2644 100644
--- a/apps/cms/src/collections/Posts/hooks/populateAuthors.ts
+++ b/apps/cms/src/collections/Posts/hooks/populateAuthors.ts
@@ -1,4 +1,5 @@
import type { CollectionAfterReadHook } from 'payload'
+
import type { Author } from '../../../payload-types'
export const populateAuthors: CollectionAfterReadHook = async ({ doc, req: { payload } }) => {
diff --git a/apps/cms/src/collections/Posts/index.ts b/apps/cms/src/collections/Posts/index.ts
index 72e8830bb3993..51fc353442013 100644
--- a/apps/cms/src/collections/Posts/index.ts
+++ b/apps/cms/src/collections/Posts/index.ts
@@ -1,5 +1,10 @@
-import type { CollectionConfig } from 'payload'
-
+import {
+ MetaDescriptionField,
+ MetaImageField,
+ MetaTitleField,
+ OverviewField,
+ PreviewField,
+} from '@payloadcms/plugin-seo/fields'
import {
BlocksFeature,
FixedToolbarFeature,
@@ -8,27 +13,19 @@ import {
InlineToolbarFeature,
lexicalEditor,
} from '@payloadcms/richtext-lexical'
+import type { CollectionConfig } from 'payload'
import { isAnyone } from '../../access/isAnyone.ts'
import { isAuthenticated } from '../../access/isAuthenticated.ts'
-
import { Banner } from '../../blocks/Banner/config.ts'
import { Code } from '../../blocks/Code/config.ts'
import { MediaBlock } from '../../blocks/MediaBlock/config.ts'
import { Quote } from '../../blocks/Quote/config.ts'
import { YouTube } from '../../blocks/YouTube/config.ts'
-import { populateAuthors } from './hooks/populateAuthors.ts'
-import { revalidateDelete, revalidatePost } from './hooks/revalidatePost.ts'
-
-import {
- MetaDescriptionField,
- MetaImageField,
- MetaTitleField,
- OverviewField,
- PreviewField,
-} from '@payloadcms/plugin-seo/fields'
import { slugField } from '../../fields/slug/index.ts'
import { WWW_SITE_ORIGIN } from '../../utilities/constants.ts'
+import { populateAuthors } from './hooks/populateAuthors.ts'
+import { revalidateDelete, revalidatePost } from './hooks/revalidatePost.ts'
const launchweekOptions = [
{ label: '6', value: '6' },
diff --git a/apps/cms/src/collections/Users.ts b/apps/cms/src/collections/Users.ts
index de665459f8e6d..e7d8db53cbff7 100644
--- a/apps/cms/src/collections/Users.ts
+++ b/apps/cms/src/collections/Users.ts
@@ -1,4 +1,5 @@
import type { CollectionConfig } from 'payload'
+
import { isAdmin, isAdminFieldLevel } from '../access/isAdmin.ts'
import { isAdminOrSelf } from '../access/isAdminOrSelf.ts'
diff --git a/apps/cms/src/components/AdminBar/index.tsx b/apps/cms/src/components/AdminBar/index.tsx
index 08c5c6c2e9d5b..f2d320a5f6192 100644
--- a/apps/cms/src/components/AdminBar/index.tsx
+++ b/apps/cms/src/components/AdminBar/index.tsx
@@ -1,12 +1,11 @@
'use client'
import type { PayloadAdminBarProps, PayloadMeUser } from '@payloadcms/admin-bar'
-
-import { cn } from '@/utilities/ui'
-import { useSelectedLayoutSegments } from 'next/navigation'
import { PayloadAdminBar } from '@payloadcms/admin-bar'
+import { useRouter, useSelectedLayoutSegments } from 'next/navigation'
import React, { useState } from 'react'
-import { useRouter } from 'next/navigation'
+
+import { cn } from '@/utilities/ui'
import './index.scss'
diff --git a/apps/cms/src/components/Card/index.tsx b/apps/cms/src/components/Card/index.tsx
index 72c44d27f72ad..23f5aa30afb48 100644
--- a/apps/cms/src/components/Card/index.tsx
+++ b/apps/cms/src/components/Card/index.tsx
@@ -1,12 +1,12 @@
'use client'
-import { cn } from '@/utilities/ui'
-import useClickableCard from '@/utilities/useClickableCard'
+
import Link from 'next/link'
import React, { Fragment } from 'react'
-import type { Post } from '@/payload-types'
-
import { Media } from '@/components/Media'
+import type { Post } from '@/payload-types'
+import { cn } from '@/utilities/ui'
+import useClickableCard from '@/utilities/useClickableCard'
export type CardPostData = Pick
diff --git a/apps/cms/src/components/CollectionArchive/index.tsx b/apps/cms/src/components/CollectionArchive/index.tsx
index b0a2a1c4935f9..c88528f365cc4 100644
--- a/apps/cms/src/components/CollectionArchive/index.tsx
+++ b/apps/cms/src/components/CollectionArchive/index.tsx
@@ -1,7 +1,7 @@
-import { cn } from '@/utilities/ui'
import React from 'react'
import { Card, CardPostData } from '@/components/Card'
+import { cn } from '@/utilities/ui'
export type Props = {
posts: CardPostData[]
diff --git a/apps/cms/src/components/Link/index.tsx b/apps/cms/src/components/Link/index.tsx
index ed9f7be0b2398..39a429b40cc6b 100644
--- a/apps/cms/src/components/Link/index.tsx
+++ b/apps/cms/src/components/Link/index.tsx
@@ -1,9 +1,9 @@
-import { Button, type ButtonProps } from '@/components/ui/button'
-import { cn } from '@/utilities/ui'
import Link from 'next/link'
import React from 'react'
+import { Button, type ButtonProps } from '@/components/ui/button'
import type { Post } from '@/payload-types'
+import { cn } from '@/utilities/ui'
type CMSLinkType = {
appearance?: 'inline' | ButtonProps['variant']
diff --git a/apps/cms/src/components/LivePreviewListener/index.tsx b/apps/cms/src/components/LivePreviewListener/index.tsx
index 8b40675e7fa97..856d773acd4af 100644
--- a/apps/cms/src/components/LivePreviewListener/index.tsx
+++ b/apps/cms/src/components/LivePreviewListener/index.tsx
@@ -1,9 +1,11 @@
'use client'
-import { getClientSideURL } from '@/utilities/getURL'
+
import { RefreshRouteOnSave as PayloadLivePreview } from '@payloadcms/live-preview-react'
import { useRouter } from 'next/navigation'
import React from 'react'
+import { getClientSideURL } from '@/utilities/getURL'
+
export const LivePreviewListener: React.FC = () => {
const router = useRouter()
return
diff --git a/apps/cms/src/components/Media/ImageMedia/index.tsx b/apps/cms/src/components/Media/ImageMedia/index.tsx
index c472254da6c60..5cd28b8e23dfd 100644
--- a/apps/cms/src/components/Media/ImageMedia/index.tsx
+++ b/apps/cms/src/components/Media/ImageMedia/index.tsx
@@ -1,15 +1,13 @@
'use client'
import type { StaticImageData } from 'next/image'
-
-import { cn } from '@/utilities/ui'
import NextImage from 'next/image'
import React from 'react'
import type { Props as MediaProps } from '../types'
-
import { cssVariables } from '@/cssVariables'
import { getClientSideURL } from '@/utilities/getURL'
+import { cn } from '@/utilities/ui'
const { breakpoints } = cssVariables
diff --git a/apps/cms/src/components/Media/VideoMedia/index.tsx b/apps/cms/src/components/Media/VideoMedia/index.tsx
index 873eaacda51b2..93632475505f4 100644
--- a/apps/cms/src/components/Media/VideoMedia/index.tsx
+++ b/apps/cms/src/components/Media/VideoMedia/index.tsx
@@ -1,11 +1,10 @@
'use client'
-import { cn } from '@/utilities/ui'
import React, { useEffect, useRef } from 'react'
import type { Props as MediaProps } from '../types'
-
import { getClientSideURL } from '@/utilities/getURL'
+import { cn } from '@/utilities/ui'
export const VideoMedia: React.FC = (props) => {
const { onClick, resource, videoClassName } = props
diff --git a/apps/cms/src/components/Media/index.tsx b/apps/cms/src/components/Media/index.tsx
index a4e2b9d0ef31b..56bf75d872ebc 100644
--- a/apps/cms/src/components/Media/index.tsx
+++ b/apps/cms/src/components/Media/index.tsx
@@ -1,8 +1,7 @@
import React, { Fragment } from 'react'
-import type { Props } from './types'
-
import { ImageMedia } from './ImageMedia'
+import type { Props } from './types'
import { VideoMedia } from './VideoMedia'
export const Media: React.FC = (props) => {
diff --git a/apps/cms/src/components/Pagination/index.tsx b/apps/cms/src/components/Pagination/index.tsx
index 448b301df2daf..bac01a968c41e 100644
--- a/apps/cms/src/components/Pagination/index.tsx
+++ b/apps/cms/src/components/Pagination/index.tsx
@@ -1,4 +1,8 @@
'use client'
+
+import { useRouter } from 'next/navigation'
+import React from 'react'
+
import {
Pagination as PaginationComponent,
PaginationContent,
@@ -9,8 +13,6 @@ import {
PaginationPrevious,
} from '@/components/ui/pagination'
import { cn } from '@/utilities/ui'
-import { useRouter } from 'next/navigation'
-import React from 'react'
export const Pagination: React.FC<{
className?: string
diff --git a/apps/cms/src/components/RichText/index.tsx b/apps/cms/src/components/RichText/index.tsx
index 727236737d4a6..50a48615ffb4f 100644
--- a/apps/cms/src/components/RichText/index.tsx
+++ b/apps/cms/src/components/RichText/index.tsx
@@ -1,4 +1,3 @@
-import { MediaBlock } from '@/blocks/MediaBlock/Component'
import {
DefaultNodeTypes,
SerializedBlockNode,
@@ -6,22 +5,22 @@ import {
type DefaultTypedEditorState,
} from '@payloadcms/richtext-lexical'
import {
+ RichText as ConvertRichText,
JSXConvertersFunction,
LinkJSXConverter,
- RichText as ConvertRichText,
} from '@payloadcms/richtext-lexical/react'
+import { BannerBlock } from '@/blocks/Banner/Component'
import { CodeBlock, CodeBlockProps } from '@/blocks/Code/Component'
-
+import { MediaBlock } from '@/blocks/MediaBlock/Component'
+import { QuoteBlock } from '@/blocks/Quote/Component'
+import { YouTubeBlock } from '@/blocks/YouTube/Component'
import type {
BannerBlock as BannerBlockProps,
MediaBlock as MediaBlockProps,
QuoteBlock as QuoteBlockProps,
YouTubeBlock as YouTubeBlockProps,
} from '@/payload-types'
-import { BannerBlock } from '@/blocks/Banner/Component'
-import { QuoteBlock } from '@/blocks/Quote/Component'
-import { YouTubeBlock } from '@/blocks/YouTube/Component'
import { cn } from '@/utilities/ui'
type NodeTypes =
diff --git a/apps/cms/src/components/ui/button.tsx b/apps/cms/src/components/ui/button.tsx
index 9cb36846b2e0b..34e2a4435fa0f 100644
--- a/apps/cms/src/components/ui/button.tsx
+++ b/apps/cms/src/components/ui/button.tsx
@@ -1,8 +1,9 @@
-import { cn } from '@/utilities/ui'
import { Slot } from '@radix-ui/react-slot'
-import { type VariantProps, cva } from 'class-variance-authority'
+import { cva, type VariantProps } from 'class-variance-authority'
import * as React from 'react'
+import { cn } from '@/utilities/ui'
+
const buttonVariants = cva(
'inline-flex items-center justify-center whitespace-nowrap rounded text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',
{
diff --git a/apps/cms/src/components/ui/card.tsx b/apps/cms/src/components/ui/card.tsx
index 54b8b442d0014..7a37960d69fae 100644
--- a/apps/cms/src/components/ui/card.tsx
+++ b/apps/cms/src/components/ui/card.tsx
@@ -1,6 +1,7 @@
-import { cn } from '@/utilities/ui'
import * as React from 'react'
+import { cn } from '@/utilities/ui'
+
const Card: React.FC<
{ ref?: React.Ref } & React.HTMLAttributes
> = ({ className, ref, ...props }) => (
diff --git a/apps/cms/src/components/ui/checkbox.tsx b/apps/cms/src/components/ui/checkbox.tsx
index 1f91c2ec9b98f..0a83952d88e7a 100644
--- a/apps/cms/src/components/ui/checkbox.tsx
+++ b/apps/cms/src/components/ui/checkbox.tsx
@@ -1,10 +1,11 @@
'use client'
-import { cn } from '@/utilities/ui'
import * as CheckboxPrimitive from '@radix-ui/react-checkbox'
import { Check } from 'lucide-react'
import * as React from 'react'
+import { cn } from '@/utilities/ui'
+
const Checkbox: React.FC<
{
ref?: React.Ref
diff --git a/apps/cms/src/components/ui/input.tsx b/apps/cms/src/components/ui/input.tsx
index 3a2208f24710e..b8a2213b69414 100644
--- a/apps/cms/src/components/ui/input.tsx
+++ b/apps/cms/src/components/ui/input.tsx
@@ -1,6 +1,7 @@
-import { cn } from '@/utilities/ui'
import * as React from 'react'
+import { cn } from '@/utilities/ui'
+
const Input: React.FC<
{
ref?: React.Ref
diff --git a/apps/cms/src/components/ui/label.tsx b/apps/cms/src/components/ui/label.tsx
index ff6a510afad18..270f65df45f77 100644
--- a/apps/cms/src/components/ui/label.tsx
+++ b/apps/cms/src/components/ui/label.tsx
@@ -1,10 +1,11 @@
'use client'
-import { cn } from '@/utilities/ui'
import * as LabelPrimitive from '@radix-ui/react-label'
-import { type VariantProps, cva } from 'class-variance-authority'
+import { cva, type VariantProps } from 'class-variance-authority'
import * as React from 'react'
+import { cn } from '@/utilities/ui'
+
const labelVariants = cva(
'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70'
)
diff --git a/apps/cms/src/components/ui/pagination.tsx b/apps/cms/src/components/ui/pagination.tsx
index 12d4f1dfb40be..37f29bf5ac37e 100644
--- a/apps/cms/src/components/ui/pagination.tsx
+++ b/apps/cms/src/components/ui/pagination.tsx
@@ -1,9 +1,9 @@
-import type { ButtonProps } from '@/components/ui/button'
+import { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react'
+import * as React from 'react'
+import type { ButtonProps } from '@/components/ui/button'
import { buttonVariants } from '@/components/ui/button'
import { cn } from '@/utilities/ui'
-import { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react'
-import * as React from 'react'
const Pagination = ({ className, ...props }: React.ComponentProps<'nav'>) => (