Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions apps/design-system/__registry__/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,17 @@ export const Index: Record<string, any> = {
subcategory: "undefined",
chunks: []
},
"admonition-responsive": {
name: "admonition-responsive",
type: "components:example",
registryDependencies: ["admonition"],
component: React.lazy(() => import("@/registry/default/example/admonition-responsive")),
source: "",
files: ["registry/default/example/admonition-responsive.tsx"],
category: "undefined",
subcategory: "undefined",
chunks: []
},
"admonition-button": {
name: "admonition-button",
type: "components:example",
Expand Down
12 changes: 12 additions & 0 deletions apps/design-system/content/docs/fragments/admonition.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,18 @@ Only ever use the `primary` (green) button `type` on a `default` Admonition. Eve
className="[&_.preview>[data-orientation=vertical]]:sm:max-w-[70%]"
/>

## Responsive

{' '}
<ComponentPreview
name="admonition-responsive"
className="[&_.preview>[data-orientation=vertical]]:sm:max-w-[70%]"
/>

Reize your browser to see the button(s) change `layout` based on the Admonition’s width.

When `layout="responsive"`, the Alert root gets `@container` so the Admonition is the container-query context. The Admonition stays `vertical` when it’s narrow and switches to `horizontal` when its own width reaches the `@md` container breakpoint, independent of page width.

### Warning

<ComponentPreview
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Button } from 'ui'
import { Admonition } from 'ui-patterns/admonition'

export default function AdmonitionDemo() {
return (
<Admonition
type="default"
layout="responsive"
title="Disk management has moved"
description="Disk management is now handled alongside Project Compute on the Compute and Disk page."
actions={<Button type="default">Go to Compute and Disk</Button>}
/>
)
}
6 changes: 6 additions & 0 deletions apps/design-system/registry/examples.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ export const examples: Registry = [
registryDependencies: ['admonition'],
files: ['example/admonition-demo.tsx'],
},
{
name: 'admonition-responsive',
type: 'components:example',
registryDependencies: ['admonition'],
files: ['example/admonition-responsive.tsx'],
},
{
name: 'admonition-button',
type: 'components:example',
Expand Down
6 changes: 0 additions & 6 deletions apps/docs/content/guides/storage/s3/compatibility.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,6 @@ Storage supports [standard](/docs/guides/storage/uploads/standard-uploads), [res

Storage supports presigning a URL using query parameters. Specifically, Supabase Storage expects requests to be made using [AWS Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html). To enable this feature, enable the S3 connection via S3 protocol in the Settings page for Supabase Storage.

<Admonition type="note">

The S3 protocol is currently in Public Alpha. If you encounter any issues or have feature requests, [contact us](/dashboard/support/new).

</Admonition>

<Admonition type="caution">

**S3 versioning is not supported.** Supabase Storage does not enable S3's versioning capabilities for buckets. Deleted objects are permanently removed and cannot be restored.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ github_url = "https://github.com/orgs/supabase/discussions/33045"
database_id = "91ae4c49-bf22-4b8c-b96b-cd11f1c38158"
---

When Point-in-Time Recovery (PITR) or physical backups are enabled, Supabase no longer generates the downloadable logical backup file (backup.gz). This is expected, as the backup pipeline switches entirely to physical backups. You can still download backups via the Supabase CLI command `pgdump`.
When Point-in-Time Recovery (PITR) or physical backups are enabled, Supabase no longer generates the downloadable logical backup file (backup.gz). This is expected, as the backup pipeline switches entirely to physical backups. You can still download backups via the [Supabase CLI `db dump` command](/docs/reference/cli/supabase-db-dump) or using [`pg_dump`](https://www.postgresql.org/docs/current/app-pgdump.html).

For step-by-step instructions, check out our guide: [Backup & Restore](/docs/guides/platform/migrating-within-supabase/backup-restore).
For step-by-step instructions using the Supabase CLI, check out the [Backup database using the CLI](/docs/guides/platform/migrating-within-supabase/backup-restore#backup-database-using-the-cli) guide.

You can also learn more about how backups work in Supabase here: [Database Backups](/docs/guides/platform/backups).
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,8 @@ export const ProfileInformation = () => {
label="Primary email"
description={
profile?.is_sso_user
? 'Primary email is managed by your SSO provider and cannot be changed here.'
: 'Primary email is used for account notifications.'
? 'Managed by your SSO provider and cannot be changed here'
: 'Used for account notifications'
}
layout="flex-row-reverse"
>
Expand Down Expand Up @@ -173,8 +173,8 @@ export const ProfileInformation = () => {
label="Username"
description={
profile?.is_sso_user
? 'Username is managed by your SSO provider and cannot be changed here.'
: 'Username appears as a display name throughout the dashboard.'
? 'Managed by your SSO provider and cannot be changed here'
: 'Display name used across dashboard'
}
layout="flex-row-reverse"
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,14 @@ export const AdvancedSettings = ({
label="Batch wait time"
description={
<>
<p>Time to wait for additional changes before sending.</p>
<p>Shorter times imply faster updates, but higher overhead.</p>
<p>
Maximum time the pipeline waits to collect additional changes before
flushing a batch.
</p>
<p>
Lower values reduce replication latency; higher values improve batching
efficiency.
</p>
</>
}
>
Expand All @@ -74,26 +80,28 @@ export const AdvancedSettings = ({

<FormField_Shadcn_
control={form.control}
name="maxSize"
name="maxTableSyncWorkers"
render={({ field }) => (
<FormItemLayout
label="Batch size"
label="Table sync workers"
layout="horizontal"
description={
<>
<p>Number of rows to send in a batch.</p>
<p>Larger batches use more memory, with the risk of running out of memory.</p>
<p>Number of tables copied in parallel during the initial snapshot phase.</p>
<p>
Each worker uses one replication slot (up to N + 1 total while syncing).
</p>
</>
}
>
<FormControl_Shadcn_>
<PrePostTab postTab="rows">
<PrePostTab postTab="workers">
<Input_Shadcn_
{...field}
type="number"
value={field.value ?? ''}
onChange={handleNumberChange(field)}
placeholder="Default: 100000"
placeholder="Default: 4"
/>
</PrePostTab>
</FormControl_Shadcn_>
Expand All @@ -103,26 +111,31 @@ export const AdvancedSettings = ({

<FormField_Shadcn_
control={form.control}
name="maxTableSyncWorkers"
name="maxCopyConnectionsPerTable"
render={({ field }) => (
<FormItemLayout
label="Table sync workers"
label="Copy connections per table"
layout="horizontal"
description={
<>
<p>Number of tables to copy in parallel during the initial sync.</p>
<p>Uses one replication slot per worker (N + 1 total when fully active).</p>
<p>
Number of parallel connections each table copy can use during initial sync.
</p>
<p>
Higher values can copy large tables faster, but consume more database
connections.
</p>
</>
}
>
<FormControl_Shadcn_>
<PrePostTab postTab="workers">
<PrePostTab postTab="connections">
<Input_Shadcn_
{...field}
type="number"
value={field.value ?? ''}
onChange={handleNumberChange(field)}
placeholder="Default: 4"
placeholder="Default: 2"
/>
</PrePostTab>
</FormControl_Shadcn_>
Expand All @@ -147,10 +160,13 @@ export const AdvancedSettings = ({
description={
<>
<p>
Maximum age of cached data before BigQuery reads from base tables at query
time.
Maximum allowed age for BigQuery cached metadata before reading base
tables.
</p>
<p>
Lower values improve freshness; higher values can reduce query cost and
latency.
</p>
<p>Lower values return fresher results, but may increase query costs.</p>
</>
}
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,16 @@ export const DestinationPanelFormSchema = z.object({
name: z.string().min(1, 'Name is required'),
publicationName: z.string().min(1, 'Publication is required'),
maxFillMs: z.number().min(1, 'Max Fill milliseconds should be greater than 0').int().optional(),
maxSize: z.number().min(1, 'Max batch size should be greater than 0').int().optional(),
maxTableSyncWorkers: z
.number()
.min(1, 'Max table sync workers should be greater than 0')
.int()
.optional(),
maxCopyConnectionsPerTable: z
.number()
.int()
.min(1, 'Max copy connections per table should be greater than 0')
.optional(),
// BigQuery fields
projectId: z.string().optional(),
datasetId: z.string().optional(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ import { useReplicationSourcesQuery } from 'data/replication/sources-query'
import { useStartPipelineMutation } from 'data/replication/start-pipeline-mutation'
import { useUpdateDestinationPipelineMutation } from 'data/replication/update-destination-pipeline-mutation'
import {
type ValidationFailure,
useValidateDestinationMutation,
type ValidationFailure,
} from 'data/replication/validate-destination-mutation'
import { useValidatePipelineMutation } from 'data/replication/validate-pipeline-mutation'
import { useIcebergNamespaceCreateMutation } from 'data/storage/iceberg-namespace-create-mutation'
Expand Down Expand Up @@ -174,8 +174,8 @@ export const DestinationForm = ({
name: destinationData?.name ?? '',
publicationName: pipelineData?.config.publication_name ?? '',
maxFillMs: pipelineData?.config?.batch?.max_fill_ms ?? undefined,
maxSize: pipelineData?.config?.batch?.max_size ?? undefined,
maxTableSyncWorkers: pipelineData?.config?.max_table_sync_workers ?? undefined,
maxCopyConnectionsPerTable: pipelineData?.config?.max_copy_connections_per_table ?? undefined,
// BigQuery fields
projectId: isBigQueryConfig ? config.big_query.project_id : '',
datasetId: isBigQueryConfig ? config.big_query.dataset_id : '',
Expand Down Expand Up @@ -303,8 +303,8 @@ export const DestinationForm = ({
sourceId,
publicationName: data.publicationName,
maxFillMs: data.maxFillMs,
maxSize: data.maxSize,
maxTableSyncWorkers: data.maxTableSyncWorkers,
maxCopyConnectionsPerTable: data.maxCopyConnectionsPerTable,
}),
])

Expand Down Expand Up @@ -403,10 +403,9 @@ export const DestinationForm = ({
}

const batchConfig: BatchConfig | undefined =
data.maxFillMs !== undefined || data.maxSize !== undefined
data.maxFillMs !== undefined
? {
...(data.maxFillMs !== undefined ? { maxFillMs: data.maxFillMs } : {}),
...(data.maxSize !== undefined ? { maxSize: data.maxSize } : {}),
}
: undefined
const hasBatchFields = batchConfig !== undefined
Expand All @@ -422,6 +421,7 @@ export const DestinationForm = ({
pipelineConfig: {
publicationName: data.publicationName,
maxTableSyncWorkers: data.maxTableSyncWorkers,
maxCopyConnectionsPerTable: data.maxCopyConnectionsPerTable,
...(hasBatchFields ? { batch: batchConfig } : {}),
},
sourceId,
Expand Down Expand Up @@ -486,10 +486,9 @@ export const DestinationForm = ({
destinationConfig = { iceberg: icebergConfig }
}
const batchConfig: BatchConfig | undefined =
data.maxFillMs !== undefined || data.maxSize !== undefined
data.maxFillMs !== undefined
? {
...(data.maxFillMs !== undefined ? { maxFillMs: data.maxFillMs } : {}),
...(data.maxSize !== undefined ? { maxSize: data.maxSize } : {}),
}
: undefined
const hasBatchFields = batchConfig !== undefined
Expand All @@ -504,6 +503,7 @@ export const DestinationForm = ({
pipelineConfig: {
publicationName: data.publicationName,
maxTableSyncWorkers: data.maxTableSyncWorkers,
maxCopyConnectionsPerTable: data.maxCopyConnectionsPerTable,
...(hasBatchFields ? { batch: batchConfig } : {}),
},
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import Link from 'next/link'
import { useParams } from 'common'
import { DOCS_URL } from 'lib/constants'
import { Button } from 'ui'
import { NoticeBar } from './ui/NoticeBar'
import {
PageSection,
PageSectionContent,
Expand All @@ -12,6 +11,7 @@ import {
PageSectionTitle,
} from 'ui-patterns'
import { DocsButton } from '../../ui/DocsButton'
import { Admonition } from 'ui-patterns/admonition'

// [Joshen] Only used for non AWS projects
export function DiskManagementPanelForm() {
Expand All @@ -26,17 +26,14 @@ export function DiskManagementPanelForm() {
<DocsButton href={`${DOCS_URL}/guides/platform/database-size#disk-management`} />
</PageSectionMeta>
<PageSectionContent>
<NoticeBar
visible={true}
<Admonition
type="default"
layout="responsive"
title="Disk Management has moved"
description="Disk configuration is now managed alongside Project Compute on the new Compute and Disk page."
actions={
<Button type="default" asChild>
<Link
href={`/project/${projectRef}/settings/compute-and-disk`}
className="!no-underline"
>
<Link href={`/project/${projectRef}/settings/compute-and-disk`}>
Go to Compute and Disk
</Link>
</Button>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useParams } from 'common'
import { InlineLink } from 'components/ui/InlineLink'
import { AlertCircle } from 'lucide-react'
import Link from 'next/link'
import { Alert_Shadcn_, AlertDescription_Shadcn_, AlertTitle_Shadcn_ } from 'ui'

interface DataApiDisabledStateProps {
Expand All @@ -17,12 +17,9 @@ export const DataApiDisabledState = ({ description }: DataApiDisabledStateProps)
<AlertTitle_Shadcn_>Data API is disabled</AlertTitle_Shadcn_>
<AlertDescription_Shadcn_>
Enable the Data API in the{' '}
<Link
href={`/project/${projectRef}/integrations/data_api/overview`}
className="text-foreground underline hover:decoration-foreground-muted"
>
<InlineLink href={`/project/${projectRef}/integrations/data_api/overview`}>
Overview
</Link>{' '}
</InlineLink>{' '}
tab to {description}.
</AlertDescription_Shadcn_>
</Alert_Shadcn_>
Expand Down
6 changes: 5 additions & 1 deletion apps/studio/components/interfaces/UserDropdown.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export function UserDropdown() {
{IS_PLATFORM && (
<>
<div className="px-2 py-1 flex flex-col gap-0 text-sm">
{!!username && (
{!!username ? (
<>
<span title={username} className="w-full text-left text-foreground truncate">
{username}
Expand All @@ -68,6 +68,10 @@ export function UserDropdown() {
</span>
)}
</>
) : (
<span title={primaryEmail} className="w-full text-left text-foreground truncate">
{primaryEmail}
</span>
)}
</div>
<DropdownMenuSeparator />
Expand Down
Loading
Loading