Postcard

Social-media-style post card with author, content, media embed, and engagement stat slots.

Overview

Purpose

The Postcard component social-media-style post card with author, content, media embed, and engagement stat slots.within our design system. It follows our composer layer principles, ensuring consistency and reusability across applications.

When to Use

  • Use when you need component functionality
  • Appropriate for textual contexts
  • Follows composer component patterns

When Not to Use

  • Avoid when simpler alternatives exist
  • Don't use for inappropriate contexts
  • Consider alternatives for edge cases

Live Example

import React from 'react';
import Postcard from './components/Postcard';
import props from '/props.json';

export default function App() {
  return (
    <div style={{ padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh' }}>
      <Postcard {...props}>
        {props.children || 'Example postcard content'}
      </Postcard>
    </div>
  );
}

Anatomy

Understanding the structure of the Postcard component helps ensure proper implementation and customization.

Property Description Type
rootSlot rendered into [data-slot="postcard"].Root
postPost region of the component.Part
headerSlot rendered into [data-slot="postcard-header"].Slot
userInfoUser info region of the component.Part
displayNameDisplay name region of the component.Part
handleHandle region of the component.Part
timestampSlot rendered into [data-slot="postcard-timestamp"].Slot
contentSlot rendered into [data-slot="postcard-content"].Slot
footerSlot rendered into [data-slot="postcard-footer"].Slot
statsSlot rendered into [data-slot="postcard-stats"].Slot
statSlot rendered into [data-slot="postcard-stat"].Slot

Variants & States

import React from 'react';
import Postcard from './components/Postcard';
import props from '/props.json';

export default function App() {
  return (
    <div style={{ padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh' }}>
      <Postcard {...props}>
        {props.children || 'Example postcard content'}
      </Postcard>
    </div>
  );
}

API Reference

Props

NameTypeRequiredDefaultDescription
childrenReactNodeYes——
postIdstringYes——
authorPostcardContextType['author']Yes——
timestampstringYes——
contentstringYes——
embedPostcardContextType['embed']No——
statsPostcardContextType['stats']Yes——

Methods

NameParametersReturnsDescription
getRelativeTimeStringdate: Date | numbervoid—

Accessibility

Standards Compliance

This component follows WCAG 2.1 AA guidelines and includes proper ARIA attributes, keyboard navigation, and screen reader support.

Accessibility Checklist

  • ○ Keyboard navigation support
  • ○ Screen reader compatibility
  • ○ Color contrast compliance
  • ○ Focus management
  • ○ ARIA attributes
  • ○ Reduced motion support

Usage Guidelines

Do

  • Use consistent spacing and sizing
  • Follow established patterns
  • Provide clear labels and descriptions
  • Test with assistive technologies

Don't

  • Override core functionality
  • Use without proper context
  • Ignore accessibility requirements
  • Modify without design system approval

Examples

Basic Usage

Simple implementation with default props and common configurations.

import React from 'react';
import Postcard from './components/Postcard';
import props from '/props.json';

export default function App() {
  return (
    <div style={{ padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh' }}>
      <Postcard {...props}>
        {props.children || 'Example postcard content'}
      </Postcard>
    </div>
  );
}

Advanced Usage

Complex patterns including composition, state management, and real-world scenarios.

import React from 'react';

export default function App() {
  return (
    <div style={{ 
      padding: '2rem', 
      display: 'flex',
      flexDirection: 'column',
      gap: '1.5rem'
    }}>
      <h3>Postcard - Advanced Patterns</h3>
      <p>Advanced usage patterns for Postcard include:</p>
      <ul>
        <li>Composition with other components</li>
        <li>Custom styling and theming</li>
        <li>Controlled vs uncontrolled patterns</li>
        <li>Form integration</li>
        <li>Accessibility enhancements</li>
      </ul>
      <p style={{ color: '#6b7280', fontStyle: 'italic' }}>
        Full advanced examples coming soon.
      </p>
    </div>
  );
}

Development Tools

Use these tools to analyze the component's performance, design tokens, and accessibility during development.

Contribute

Help us improve the Postcard component documentation. Found an issue or have suggestions?

Related Components