mirror of
https://github.com/documenso/documenso
synced 2026-04-21 13:27:18 +00:00
216 lines
7.1 KiB
Text
216 lines
7.1 KiB
Text
---
|
|
title: CSS Variables
|
|
description: Customize the appearance of embedded signing experiences with CSS variables and class targets.
|
|
---
|
|
|
|
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
|
|
import { Callout } from 'fumadocs-ui/components/callout';
|
|
|
|
<Callout type="info">
|
|
Custom CSS and CSS variables are available on the [Platform
|
|
Plan](https://documen.so/platform-cta-pricing).
|
|
</Callout>
|
|
|
|
## CSS Variables
|
|
|
|
Use the `cssVars` prop on any embed component to override default colors, spacing, and more.
|
|
|
|
```jsx
|
|
<EmbedDirectTemplate
|
|
token="your-token"
|
|
cssVars={{
|
|
background: '#ffffff',
|
|
foreground: '#000000',
|
|
primary: '#0000ff',
|
|
primaryForeground: '#ffffff',
|
|
radius: '0.5rem',
|
|
}}
|
|
/>
|
|
```
|
|
|
|
### Colors
|
|
|
|
| Variable | Description |
|
|
| ----------------------- | --------------------------------- |
|
|
| `background` | Base background color |
|
|
| `foreground` | Base text color |
|
|
| `muted` | Muted/subtle background color |
|
|
| `mutedForeground` | Muted/subtle text color |
|
|
| `popover` | Popover/dropdown background color |
|
|
| `popoverForeground` | Popover/dropdown text color |
|
|
| `card` | Card background color |
|
|
| `cardBorder` | Card border color |
|
|
| `cardBorderTint` | Card border tint/highlight color |
|
|
| `cardForeground` | Card text color |
|
|
| `fieldCard` | Field card background color |
|
|
| `fieldCardBorder` | Field card border color |
|
|
| `fieldCardForeground` | Field card text color |
|
|
| `widget` | Widget background color |
|
|
| `widgetForeground` | Widget text color |
|
|
| `border` | Default border color |
|
|
| `input` | Input field border color |
|
|
| `primary` | Primary action/button color |
|
|
| `primaryForeground` | Primary action/button text color |
|
|
| `secondary` | Secondary action/button color |
|
|
| `secondaryForeground` | Secondary button text color |
|
|
| `accent` | Accent/highlight color |
|
|
| `accentForeground` | Accent/highlight text color |
|
|
| `destructive` | Destructive/danger action color |
|
|
| `destructiveForeground` | Destructive/danger text color |
|
|
| `ring` | Focus ring color |
|
|
| `warning` | Warning/alert color |
|
|
| `envelopeEditorBackground` | Envelope editor background color. _V2 Envelope Editor only._ |
|
|
|
|
### Spacing
|
|
|
|
| Variable | Description |
|
|
| -------- | ---------------------------------- |
|
|
| `radius` | Border radius size (e.g. `0.5rem`) |
|
|
|
|
### Framework Usage
|
|
|
|
Pass `cssVars` to any embed component. The syntax varies by framework:
|
|
|
|
```jsx
|
|
// React / Preact
|
|
<EmbedDirectTemplate token={token} cssVars={cssVars} />
|
|
|
|
// Vue
|
|
<EmbedDirectTemplate :token="token" :cssVars="cssVars" />
|
|
|
|
// Svelte
|
|
<EmbedDirectTemplate {token} cssVars={cssVars} />
|
|
|
|
// Solid
|
|
<EmbedDirectTemplate token={token} cssVars={cssVars} />
|
|
```
|
|
|
|
### Color Formats
|
|
|
|
Colors can be specified in any valid CSS format:
|
|
|
|
- Hex: `#ff0000`
|
|
- RGB: `rgb(255, 0, 0)`
|
|
- HSL: `hsl(0, 100%, 50%)`
|
|
- Named: `red`
|
|
|
|
---
|
|
|
|
## Custom CSS
|
|
|
|
Use the `css` prop to inject a CSS string for more targeted control:
|
|
|
|
```jsx
|
|
<EmbedDirectTemplate
|
|
token="your-token"
|
|
css={`
|
|
.documenso-embed {
|
|
border-radius: 8px;
|
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
}
|
|
`}
|
|
/>
|
|
```
|
|
|
|
---
|
|
|
|
## CSS Class Targets
|
|
|
|
Specific parts of the embed can be targeted with CSS classes for granular styling.
|
|
|
|
### Component Classes
|
|
|
|
| Class | Description |
|
|
| --------------------------------- | --------------------------------------------- |
|
|
| `.embed--Root` | Main container for the embedded experience |
|
|
| `.embed--DocumentContainer` | Container for the document and signing widget |
|
|
| `.embed--DocumentViewer` | Container for the document viewer |
|
|
| `.embed--DocumentWidget` | The signing widget container |
|
|
| `.embed--DocumentWidgetContainer` | Outer container for the signing widget |
|
|
| `.embed--DocumentWidgetHeader` | Header section of the signing widget |
|
|
| `.embed--DocumentWidgetContent` | Main content area of the signing widget |
|
|
| `.embed--DocumentWidgetForm` | Form section within the signing widget |
|
|
| `.embed--DocumentWidgetFooter` | Footer section of the signing widget |
|
|
| `.embed--WaitingForTurn` | Waiting screen when it is not the user's turn |
|
|
| `.embed--DocumentCompleted` | Completion screen after signing |
|
|
| `.field--FieldRootContainer` | Base container for document fields |
|
|
|
|
### Field Data Attributes
|
|
|
|
Fields expose data attributes for state-based styling:
|
|
|
|
| Attribute | Values | Description |
|
|
| ------------------- | ---------------------------------------------- | ------------------------------------ |
|
|
| `[data-field-type]` | `SIGNATURE`, `TEXT`, `CHECKBOX`, `RADIO`, etc. | The type of field |
|
|
| `[data-inserted]` | `true`, `false` | Whether the field has been filled |
|
|
| `[data-validate]` | `true`, `false` | Whether the field is being validated |
|
|
|
|
### Example
|
|
|
|
```css
|
|
/* Style signature fields */
|
|
.field--FieldRootContainer[data-field-type='SIGNATURE'] {
|
|
background-color: rgba(0, 0, 0, 0.02);
|
|
}
|
|
|
|
/* Style filled fields */
|
|
.field--FieldRootContainer[data-inserted='true'] {
|
|
background-color: var(--primary);
|
|
opacity: 0.2;
|
|
}
|
|
|
|
/* Custom widget styling */
|
|
.embed--DocumentWidget {
|
|
background-color: #ffffff;
|
|
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
|
|
}
|
|
```
|
|
|
|
### Additional Examples
|
|
|
|
```css
|
|
/* Style all field containers with transitions */
|
|
.field--FieldRootContainer {
|
|
transition: all 200ms ease;
|
|
}
|
|
|
|
/* Custom styles for the waiting screen */
|
|
.embed--WaitingForTurn {
|
|
background-color: #f9fafb;
|
|
padding: 2rem;
|
|
}
|
|
|
|
/* Responsive adjustments for the document container */
|
|
@media (min-width: 768px) {
|
|
.embed--DocumentContainer {
|
|
gap: 2rem;
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
<Accordions type="multiple">
|
|
<Accordion title="Maintain contrast">
|
|
Ensure sufficient contrast between background and foreground colors for accessibility.
|
|
</Accordion>
|
|
<Accordion title="Test dark mode">
|
|
If dark mode is not disabled, verify your variables work in both modes.
|
|
</Accordion>
|
|
<Accordion title="Match your brand">
|
|
Align `primary` and `accent` colors with your brand for a cohesive look.
|
|
</Accordion>
|
|
<Accordion title="Consistent radius">
|
|
Use a border radius that matches your application's design system.
|
|
</Accordion>
|
|
</Accordions>
|
|
|
|
---
|
|
|
|
## See Also
|
|
|
|
- [Embedding Overview](/docs/developers/embedding) - Props reference and concepts
|
|
- [React](/docs/developers/embedding/sdks/react) - React SDK usage
|
|
- [Vue](/docs/developers/embedding/sdks/vue) - Vue SDK usage
|