---
title: Share Dialog
description: A dialog that mints a shareable download or upload link with a chosen expiry — driven by useFiles.
---

Mints a shareable link for one key. Download links go through [`url()`](/api/url) — a signed URL where the adapter supports it, a permanent public one where it doesn't — while upload links go through [`signedUploadUrl()`](/api/signed-upload-url). Pick an expiry (clamped to the adapter's cap), choose inline vs. attachment, then copy.

<ComponentPreview name="share-dialog/share-dialog-basic" />

## Installation

<ComponentInstall name="share-dialog" />

## Usage

```tsx lineNumbers
import { useFiles } from "files-sdk/react";

import { ShareDialog } from "@/components/files-sdk/share-dialog";

export function Row({ fileKey }: { fileKey: string }) {
  const files = useFiles({ endpoint: "/api/files" });

  return <ShareDialog files={files} fileKey={fileKey} />;
}
```

The component reads [`capabilities()`](/api/capabilities) when it opens, so the expiry presets are clamped to the adapter's `signedUrl.maxExpiresIn` and it warns when the backend can only return a permanent public URL. Pass `mode="upload"` to hand out a presigned upload target instead, or a custom trigger via `children`.

## Props

<AutoTypeTable
  path="registry/files-sdk/share-dialog/share-dialog.tsx"
  name="ShareDialogProps"
/>
