@seplan/diti-ds
Version: 
Reusable UI component library developed by DITI (Technology and Innovation Directorate of SEPLAN PI) based on Mantine and Tailwind CSS
265 lines (200 loc) • 5.51 kB
Markdown
# @seplan/diti-ds
Reusable UI component library developed by DITI (Technology and Innovation Directorate of SEPLAN PI) based on Mantine and Tailwind CSS.
## Installation
```bash
npm install @seplan/diti-ds
# or
yarn add @seplan/diti-ds
# or
pnpm add @seplan/diti-ds
```
## Peer Dependencies
This library requires the following peer dependencies:
```bash
npm install @mantine/core @mantine/hooks react react-dom
# or
yarn add @mantine/core @mantine/hooks react react-dom
# or
pnpm add @mantine/core @mantine/hooks react react-dom
```
## Usage
### Import all components
```tsx
import { Card, Button, SearchInput } from '@seplan/diti-ds'
```
### Import specific modules
```tsx
// Import only UI components
import { Card, Button } from '@seplan/diti-ds/ui'
// Import only hooks
import { useClipboard, useMediaQuery } from '@seplan/diti-ds/hooks'
// Import only utilities
import { cn, formatCurrency } from '@seplan/diti-ds/utils'
// Import only components (same as ui)
import { Card, Button } from '@seplan/diti-ds/components'
```
### Import styles
```tsx
import '@seplan/diti-ds/styles'
```
## Available Components
### Basic Components
- `AxisCard` - Card component with axis styling
- `BackButton` - Button for navigation back
- `Breadcrumbs` - Breadcrumb navigation component
- `Card` - Basic card component
- `EmptyState` - Empty state component
- `Label` - Label component
- `SearchInput` - Search input component
### Logo Components
- `Logo` - Logo component
- `LogoHorizontal` - Horizontal logo component
### Navigation Components
- `NavigationTabs` - Tab navigation component
- `BackButton` - Back navigation button
### Filter Components
- `AsyncFilter` - Asynchronous filter component
- `FilterManager` - Filter management component
- `FilterPopover` - Filter popover component
- `DateRangeFilter` - Date range filter
- `ValueRangeFilter` - Value range filter
### Data Display Components
- `DataList` - Data list component
- `SortableColumnHeader` - Sortable column header
- `PaginationFooter` - Pagination footer components
### Form Components
- `FormDrawer` - Form drawer component
- `RadioCard` - Radio card component
- `OptionalInputLabel` - Optional input label
### Utility Components
- `ClearFiltersButton` - Clear filters button
- `CounselorStatusBadge` - Counselor status badge
- `ImagePlaceholder` - Image placeholder
- `SeplanAppsBar` - SEPLAN apps bar
## Available Hooks
- `useClipboard` - Clipboard utility hook
- `useDownloadBlob` - Download blob hook
- `useMediaQuery` - Media query hook
- `usePaginationReset` - Pagination reset hook
- `useQRCodeGenerator` - QR code generator hook
- `useSortableColumn` - Sortable column hook
- `useFilters` - Filters hook
- `useSelectedItems` - Selected items hook
## Available Utilities
- `cn` - Class name utility (clsx + tailwind-merge)
- `formatCurrency` - Currency formatting utility
- `formatDate` - Date formatting utility
- `formatCPF` - CPF formatting utility
- `isValidCPF` - CPF validation utility
- `removeAccents` - Remove accents utility
- `normalizeForSearch` - Search normalization utility
## Examples
### Basic Card Usage
```tsx
import { Card } from '@seplan/diti-ds'
function MyComponent() {
  return (
    <Card>
      <Card.Header>
        <Card.Title>My Card Title</Card.Title>
      </Card.Header>
      <Card.Content>
        <p>Card content goes here</p>
      </Card.Content>
    </Card>
  )
}
```
### Search Input Usage
```tsx
import { SearchInput } from '@seplan/diti-ds'
function MyComponent() {
  const handleSearch = (value: string) => {
    console.log('Searching for:', value)
  }
  return (
    <SearchInput
      placeholder="Search..."
      onSearch={handleSearch}
      debounceMs={300}
    />
  )
}
```
### Using Hooks
```tsx
import { useClipboard, useMediaQuery } from '@seplan/diti-ds'
function MyComponent() {
  const { copy, copied } = useClipboard()
  const isMobile = useMediaQuery('(max-width: 768px)')
  const handleCopy = () => {
    copy('Text to copy')
  }
  return (
    <div>
      <button onClick={handleCopy}>
        {copied ? 'Copied!' : 'Copy Text'}
      </button>
      {isMobile && <p>Mobile view</p>}
    </div>
  )
}
```
### Using Utilities
```tsx
import { cn, formatCurrency, formatDate } from '@seplan/diti-ds'
function MyComponent() {
  const className = cn(
    'base-class',
    'conditional-class',
    { 'active': true }
  )
  return (
    <div className={className}>
      <p>Price: {formatCurrency(1234.56)}</p>
      <p>Date: {formatDate(new Date())}</p>
    </div>
  )
}
```
## Development
### Setup
```bash
git clone <repository-url>
cd diti-ds
npm install
```
### Development Commands
```bash
# Start development server
npm run dev
# Build library
npm run build:lib
# Build types
npm run build:types
# Start Storybook
npm run storybook
# Build Storybook
npm run build-storybook
# Lint code
npm run lint
# Format code
npm run format
```
### Publishing
```bash
# Publish patch version
npm run publish:patch
# Publish minor version
npm run publish:minor
# Publish major version
npm run publish:major
```
## Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request
## License
MIT