# Signature Pad URL: https://ark-ui.com/docs/components/signature-pad Source: https://raw.githubusercontent.com/chakra-ui/ark/refs/heads/main/website/src/content/pages/components/signature-pad.mdx A component that allows users to draw a signature using a signature pad. --- ## Anatomy ```tsx ``` ## Examples **Example: basic** #### React ```tsx import { SignaturePad } from '@ark-ui/react/signature-pad' import { RotateCcwIcon } from 'lucide-react' import styles from 'styles/signature-pad.module.css' export const Basic = () => ( Sign below ) ``` #### Solid ```tsx import { SignaturePad } from '@ark-ui/solid/signature-pad' import { RotateCcwIcon } from 'lucide-solid' import styles from 'styles/signature-pad.module.css' export const Basic = () => ( Sign below ) ``` #### Vue ```vue ``` #### Svelte ```svelte Sign below ``` ### Image Preview After the user draws a signature, you can display a preview of the signature as an image. This is useful when you want to show the user a preview of the signature before saving it. **Example: image-preview** #### React ```tsx import { SignaturePad } from '@ark-ui/react/signature-pad' import { RotateCcwIcon } from 'lucide-react' import { useState } from 'react' import styles from 'styles/signature-pad.module.css' export const ImagePreview = () => { const [imageUrl, setImageUrl] = useState('') return (
details.getDataUrl('image/png').then((url) => setImageUrl(url))} > Sign below
Image Preview {imageUrl && Signature}
) } ``` #### Solid ```tsx import { SignaturePad } from '@ark-ui/solid/signature-pad' import { RotateCcwIcon } from 'lucide-solid' import { Show, createSignal } from 'solid-js' import styles from 'styles/signature-pad.module.css' export const ImagePreview = () => { const [imageUrl, setImageUrl] = createSignal('') return (
details.getDataUrl('image/png').then((url) => setImageUrl(url))} > Sign below
Image Preview Signature
) } ``` #### Vue ```vue ``` #### Svelte ```svelte
details.getDataUrl('image/png').then((url) => (imageUrl = url))} > Sign below
Image Preview {#if imageUrl} Signature {/if}
``` ### Field The `Field` component helps manage form-related state and accessibility attributes of a signature pad. It includes handling ARIA labels, helper text, and error text to ensure proper accessibility. **Example: with-field** #### React ```tsx import { Field } from '@ark-ui/react/field' import { SignaturePad } from '@ark-ui/react/signature-pad' import { RotateCcwIcon } from 'lucide-react' import field from 'styles/field.module.css' import styles from 'styles/signature-pad.module.css' export const WithField = () => ( Label Additional Info Error Info ) ``` #### Solid ```tsx import { Field } from '@ark-ui/solid/field' import { SignaturePad } from '@ark-ui/solid/signature-pad' import { RotateCcwIcon } from 'lucide-solid' import field from 'styles/field.module.css' import styles from 'styles/signature-pad.module.css' export const WithField = () => ( Label Additional Info Error Info ) ``` #### Vue ```vue ``` #### Svelte ```svelte Label Additional Info Error Info ``` ### Root Provider An alternative way to control the signature pad is to use the `RootProvider` component and the `useSignaturePad` hook. This way you can access the state and methods from outside the component. **Example: root-provider** #### React ```tsx import { SignaturePad, useSignaturePad } from '@ark-ui/react/signature-pad' import { RotateCcwIcon } from 'lucide-react' import styles from 'styles/signature-pad.module.css' export const RootProvider = () => { const signaturePad = useSignaturePad() return (
no of paths: {signaturePad.paths.length} Sign below
) } ``` #### Solid ```tsx import { SignaturePad, useSignaturePad } from '@ark-ui/solid/signature-pad' import { RotateCcwIcon } from 'lucide-solid' import styles from 'styles/signature-pad.module.css' export const RootProvider = () => { const signaturePad = useSignaturePad() return (
no of paths: {signaturePad().paths.length} Sign below
) } ``` #### Vue ```vue ``` #### Svelte ```svelte
no of paths: {signaturePad().paths.length} Sign below
``` ## API Reference ### Props **Component API Reference** #### React **Root Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `defaultPaths` | `string[]` | No | The default paths of the signature pad. Use when you don't need to control the paths of the signature pad. | | `disabled` | `boolean` | No | Whether the signature pad is disabled. | | `drawing` | `DrawingOptions` | No | The drawing options. | | `ids` | `Partial<{ root: string; control: string; hiddenInput: string; label: string }>` | No | The ids of the signature pad elements. Useful for composition. | | `name` | `string` | No | The name of the signature pad. Useful for form submission. | | `onDraw` | `(details: DrawDetails) => void` | No | Callback when the signature pad is drawing. | | `onDrawEnd` | `(details: DrawEndDetails) => void` | No | Callback when the signature pad is done drawing. | | `paths` | `string[]` | No | The controlled paths of the signature pad. | | `readOnly` | `boolean` | No | Whether the signature pad is read-only. | | `required` | `boolean` | No | Whether the signature pad is required. | | `translations` | `IntlTranslations` | No | The translations of the signature pad. Useful for internationalization. | **Root Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | root | | `[data-disabled]` | Present when disabled | **ClearTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Control Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Control Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | control | | `[data-disabled]` | Present when disabled | **Guide Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Guide Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | guide | | `[data-disabled]` | Present when disabled | **HiddenInput Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `value` | `string` | Yes | | | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Label Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Label Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | label | | `[data-disabled]` | Present when disabled | | `[data-required]` | Present when required | **RootProvider Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `value` | `UseSignaturePadReturn` | Yes | | | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Segment Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | #### Solid **Root Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `(props: ParentProps<'div'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `defaultPaths` | `string[]` | No | The default paths of the signature pad. Use when you don't need to control the paths of the signature pad. | | `disabled` | `boolean` | No | Whether the signature pad is disabled. | | `drawing` | `DrawingOptions` | No | The drawing options. | | `ids` | `Partial<{ root: string; control: string; hiddenInput: string; label: string }>` | No | The ids of the signature pad elements. Useful for composition. | | `name` | `string` | No | The name of the signature pad. Useful for form submission. | | `onDraw` | `(details: DrawDetails) => void` | No | Callback when the signature pad is drawing. | | `onDrawEnd` | `(details: DrawEndDetails) => void` | No | Callback when the signature pad is done drawing. | | `paths` | `string[]` | No | The controlled paths of the signature pad. | | `readOnly` | `boolean` | No | Whether the signature pad is read-only. | | `required` | `boolean` | No | Whether the signature pad is required. | | `translations` | `IntlTranslations` | No | The translations of the signature pad. Useful for internationalization. | **Root Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | root | | `[data-disabled]` | Present when disabled | **ClearTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `(props: ParentProps<'button'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Control Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `(props: ParentProps<'div'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Control Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | control | | `[data-disabled]` | Present when disabled | **Guide Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `(props: ParentProps<'div'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Guide Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | guide | | `[data-disabled]` | Present when disabled | **HiddenInput Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `value` | `string` | Yes | | | `asChild` | `(props: ParentProps<'input'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Label Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `(props: ParentProps<'label'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Label Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | label | | `[data-disabled]` | Present when disabled | | `[data-required]` | Present when required | **RootProvider Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `value` | `UseSignaturePadReturn` | Yes | | | `asChild` | `(props: ParentProps<'div'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Segment Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `(props: ParentProps<'svg'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | #### Vue **Root Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `defaultPaths` | `string[]` | No | The default paths of the signature pad. | | `disabled` | `boolean` | No | Whether the signature pad is disabled. | | `drawing` | `DrawingOptions` | No | The drawing options. | | `id` | `string` | No | The unique identifier of the machine. | | `ids` | `Partial<{ root: string; control: string; hiddenInput: string; label: string }>` | No | The ids of the signature pad elements. Useful for composition. | | `name` | `string` | No | The name of the signature pad. Useful for form submission. | | `readOnly` | `boolean` | No | Whether the signature pad is read-only. | | `required` | `boolean` | No | Whether the signature pad is required. | | `translations` | `IntlTranslations` | No | The translations of the signature pad. Useful for internationalization. | **Root Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | root | | `[data-disabled]` | Present when disabled | **ClearTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Control Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Control Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | control | | `[data-disabled]` | Present when disabled | **Guide Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Guide Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | guide | | `[data-disabled]` | Present when disabled | **HiddenInput Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `value` | `string` | Yes | | | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Label Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Label Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | label | | `[data-disabled]` | Present when disabled | | `[data-required]` | Present when required | **RootProvider Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `value` | `SignaturePadApi` | Yes | | | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Segment Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | #### Svelte **Root Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `Snippet<[PropsFn<'div'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `defaultPaths` | `string[]` | No | The default paths of the signature pad. Use when you don't need to control the paths of the signature pad. | | `disabled` | `boolean` | No | Whether the signature pad is disabled. | | `drawing` | `DrawingOptions` | No | The drawing options. | | `id` | `string` | No | The unique identifier of the machine. | | `ids` | `Partial<{ root: string; control: string; hiddenInput: string; label: string }>` | No | The ids of the signature pad elements. Useful for composition. | | `name` | `string` | No | The name of the signature pad. Useful for form submission. | | `onDraw` | `(details: DrawDetails) => void` | No | Callback when the signature pad is drawing. | | `onDrawEnd` | `(details: DrawEndDetails) => void` | No | Callback when the signature pad is done drawing. | | `paths` | `string[]` | No | The controlled paths of the signature pad. | | `readOnly` | `boolean` | No | Whether the signature pad is read-only. | | `ref` | `Element` | No | | | `required` | `boolean` | No | Whether the signature pad is required. | | `translations` | `IntlTranslations` | No | The translations of the signature pad. Useful for internationalization. | **Root Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | root | | `[data-disabled]` | Present when disabled | **ClearTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `Snippet<[PropsFn<'button'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `ref` | `Element` | No | | **Context Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `render` | `Snippet<[UseSignaturePadContext]>` | Yes | | **Control Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `Snippet<[PropsFn<'div'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `ref` | `Element` | No | | **Control Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | control | | `[data-disabled]` | Present when disabled | **Guide Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `Snippet<[PropsFn<'div'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `ref` | `Element` | No | | **Guide Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | guide | | `[data-disabled]` | Present when disabled | **HiddenInput Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `value` | `string` | Yes | | | `asChild` | `Snippet<[PropsFn<'input'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `ref` | `Element` | No | | **Label Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `Snippet<[PropsFn<'label'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `ref` | `Element` | No | | **Label Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | signature-pad | | `[data-part]` | label | | `[data-disabled]` | Present when disabled | | `[data-required]` | Present when required | **RootProvider Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `value` | `UseSignaturePadReturn` | Yes | | | `asChild` | `Snippet<[PropsFn<'div'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `ref` | `Element` | No | | **Segment Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `Snippet<[PropsFn<'svg'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `ref` | `Element` | No | | ### Context **API:** | Property | Type | Description | |----------|------|-------------| | `empty` | `boolean` | Whether the signature pad is empty. | | `drawing` | `boolean` | Whether the user is currently drawing. | | `currentPath` | `string` | The current path being drawn. | | `paths` | `string[]` | The paths of the signature pad. | | `getDataUrl` | `(type: DataUrlType, quality?: number) => Promise` | Returns the data URL of the signature pad. | | `clear` | `VoidFunction` | Clears the signature pad. |