@frontrowcc/react-components
v0.0.6
Published
This is the opinionated component library used to build FrontRow extensions and our core product. It provides a comprehensive set of React components designed for consistent, accessible, and customizable user interfaces.
Downloads
12
Readme
FrontRow React Component Library
This is the opinionated component library used to build FrontRow extensions and our core product. It provides a comprehensive set of React components designed for consistent, accessible, and customizable user interfaces.
Installation
yarn add @frontrowcc/react-componentsAvailable Components
Layout & Structure
Card
A flexible card component that provides various visual styles and layout options. Perfect for containing content in a visually distinct container with optional styling variants.
import { Card } from '@frontrowcc/react-components'
;<Card variant="glassmorphism" width="300px" height="200px" padding="2rem">
Content with custom dimensions and styling
</Card>Variants: borderless, errorToast, ghost, glassmorphism, successToast, warningToast
Accordion
A flexible and accessible accordion component built on top of Radix UI's Accordion primitive. Supports both single and multiple panel variants with customizable styling and animations.
import { Accordion, Accordions } from '@frontrowcc/react-components'
// Single accordion
<Accordion title="Section Title" defaultValue="item-1">
This is the accordion content
</Accordion>
// Multiple accordions
const items = [
{ title: "Section 1", content: "Content for section 1" },
{ title: "Section 2", content: "Content for section 2" }
]
<Accordions items={items} />Tabs
A flexible and accessible tabs component built with Radix UI that supports multiple styles, scrolling, and advanced features like notifications and error states.
import { Tabs } from '@frontrowcc/react-components'
const tabs = [
{ label: 'Account', value: 'account', content: <div>Account settings</div> },
{ label: 'Password', value: 'password', content: <div>Password settings</div> }
]
<Tabs tabs={tabs} type="pills" defaultValue="account" />Types: underlined, pills, drawer, spacedPills
User Interface
Button
A versatile button component that supports multiple variants, sizes, and states. Built with accessibility and customization in mind.
import { Button, LinkButton } from '@frontrowcc/react-components'
<Button variant="primary" size="large" loading>Submit</Button>
<LinkButton href="/internal-route">Internal Route</LinkButton>Variants: primary, secondary, tertiary, minimal, outlined, translucent, yellow
Sizes: extraSmall, small, medium, large
Avatar
A flexible avatar component that displays either an image or initials. Automatically falls back to displaying the first initial of the display name when no image URL is provided.
import { Avatar } from '@frontrowcc/react-components'
;<Avatar
avatarUrl="https://example.com/avatar.jpg"
displayName="John Doe"
size="32"
/>Icon
A flexible SVG icon renderer that uses an SVG sprite sheet for displaying various icons in the application.
import { Icon } from '@frontrowcc/react-components'
<Icon name="search" size="medium" />
<Icon name="close" width={24} height={24} />Sizes: xsmall, small, medium, large, xlarge, xxlarge
Spinner
A lightweight, customizable loading spinner component that provides visual feedback for loading states.
import { Spinner } from '@frontrowcc/react-components'
;<Spinner width={32} height={32} color="#FF0000" />ToggleGroup
A customizable toggle group component that allows users to select a single option from multiple choices. Built on top of Radix UI's Toggle Group component with support for icons and labels.
import { ToggleGroup } from '@frontrowcc/react-components'
;<ToggleGroup
name="layout-selector"
defaultValue="list"
onChange={(value) => setViewMode(value)}
options={[
{ value: 'list', label: 'List View', Icon: ListIcon },
{ value: 'grid', label: 'Grid View', Icon: GridIcon },
{ value: 'card', label: 'Card View', Icon: CardIcon },
]}
/>Features: Single selection, icon support, accessible, full width option, admin and monochrome styling variants
Alert
Visual feedback component for displaying important messages to users.
import { Alert } from '@frontrowcc/react-components'
;<Alert variant="success">Operation completed successfully!</Alert>Data Display
Table
A reusable table component built on top of AG Grid Community Edition with features like filtering, sorting, and empty states.
import { Table } from '@frontrowcc/react-components'
const columnDefs = [
{ field: 'id', headerName: 'ID' },
{ field: 'name', headerName: 'Name' },
{ field: 'email', headerName: 'Email' }
]
<Table<User> colDefs={columnDefs} rowData={users} />Image
A simple yet robust image component with built-in fallback handling and responsive capabilities.
import { Image } from '@frontrowcc/react-components'
;<Image imageSrc="https://example.com/image.jpg" alt="Responsive image" fill />Tooltip
A flexible tooltip component built on top of Radix UI's Tooltip primitive. Provides informative hover tooltips for desktop and touch-friendly popovers for mobile devices.
import { Tooltip } from '@frontrowcc/react-components'
;<Tooltip content="Helpful information" delay={500}>
<button>Hover me</button>
</Tooltip>Tag
A versatile tag/badge component that supports multiple variants, colors, and styles for labeling and categorization.
import { Tag } from '@frontrowcc/react-components'
<Tag color="green">Success</Tag>
<Tag color="red" variant="small">Error</Tag>
<Tag variant="bordered" text="primary">Label</Tag>Colors: green, grey, orange, red, white, yellow
Text Colors: blue, orange, primary, red, white, yellow
Variants: bordered, contentPicker, disabled, livestream, neutral, notLivestream, small, square
Typography
A comprehensive set of typography components for consistent text styling across the application.
import { Text, Heading, Eyebrows } from '@frontrowcc/react-components'
<Heading size="xxl" color="primary">Main Title</Heading>
<Text size="lg" semiBold>Important text content</Text>
<Eyebrows size="md" color="secondary">Category Label</Eyebrows>Text Sizes: xxs, xs, sm, md, lg
Heading Sizes: sm, md, lg, xl, xxl
Eyebrows Sizes: xs, sm, md, lg
Colors: primary, secondary, tertiary, quaternary, success
Form Components
A comprehensive collection of form components built for React applications. These components are designed to provide a consistent, accessible, and customizable form experience.
TextInput
A flexible text input component that supports icons, helper text, and validation.
import { TextInput } from '@frontrowcc/react-components'
;<TextInput
name="email"
label="Email Address"
placeholder="Enter your email"
required
helperText="We'll never share your email"
/>Select & MultiSelect
Customizable select components built on top of react-select.
import { Select, MultiSelect } from '@frontrowcc/react-components'
const options = [
{ value: 'option1', label: 'Option 1' },
{ value: 'option2', label: 'Option 2' }
]
<Select
name="select"
label="Choose an option"
options={options}
placeholder="Select an option..."
/>Checkbox
A customizable checkbox component with support for different sizes.
import { Checkbox } from '@frontrowcc/react-components'
;<Checkbox name="terms" label="I agree to the terms" checkSize="md" />Sizes: xs, sm, md
Radio & RadioGroup
Radio button components for single-selection options.
import { Radio, RadioGroup } from '@frontrowcc/react-components'
;<RadioGroup name="options">
<Radio id="option1" name="options" label="Option 1" value="1" />
<Radio id="option2" name="options" label="Option 2" value="2" />
</RadioGroup>Additional Form Components
ColorInput: Color picker inputFileInput: File upload inputPhoneInput: Phone number input with formattingTextArea: Multi-line text inputToggle: Toggle switch componentDropdown: Enhanced dropdown with various styling options
Theme Support
ThemeProvider
Provides theme context and global styles for the component library.
import { ThemeProvider, getGlobalStyles } from '@frontrowcc/react-components'
;<ThemeProvider>
<App />
</ThemeProvider>Common Props
Most components share these common props:
className: Additional CSS class namestestId: Test ID for testing purposesdisabled: Whether the component is disabledchildren: Content to be rendered inside the component
Form-Specific Common Props
name(required): Unique identifier for the form fieldlabel: Text label for the fielderror: Error message to displayrequired: Whether the field is requiredtooltipText: Tooltip text to show on hover
Styling
The components use CSS modules for styling and support theming through CSS variables. Key variables include:
--primaryColor: Primary theme color--text-default: Default text color--text-secondary: Secondary text color--bg-default: Default background color--stroke-default: Border color--radius-sm: Small border radius--spacing-4: Small spacing unit--spacing-8: Medium spacing unit
Accessibility
All components are built with accessibility in mind:
- ARIA labels and descriptions
- Keyboard navigation support
- Focus management
- Screen reader friendly
- Support for required and error states
- High contrast mode compatibility
Browser Support
- Modern browsers supporting CSS Grid and Flexbox
- ES6+ JavaScript features
- ResizeObserver and MutationObserver APIs (for applicable components)
Dependencies
Key dependencies include:
- React 16.8+
- Radix UI primitives (for accessible components)
- AG Grid Community (for Table component)
- react-select (for Select components)
- clsx (for class name management)
Development
Creating New Icons
- Create a new SVG file in
libs/ui/src/Iconography/svg-icons - Use kebab-case for the file name
- Run
yarn generateto make it available
Component Structure
Each component follows this structure:
- Main component file (
Component.tsx) - Styles (
Component.module.scss) - Tests (
Component.test.tsx) - Documentation (
README.md) - Types (
types.tsif needed)
Contributing
When contributing to this library:
- Follow the existing component patterns
- Include comprehensive tests
- Update documentation
- Maintain accessibility standards
- Use CSS properties in alphabetical order
- Export types in their own exports
- Use yarn instead of npm for commands
Changelog
See CHANGELOG.md for version history and changes.
