# Known Limitations

This document lists known limitations, missing features, and design decisions in vapora-leptos-ui v1.2.0.

## Missing Components

### Form Controls

- **Select** - Dropdown select component not implemented
- **Textarea** - Multi-line text input not implemented
- **Checkbox** - Checkbox input not implemented
- **Radio** - Radio button group not implemented
- **Toggle/Switch** - Toggle switch not implemented

### Layout Components

- **Dialog** - Generic dialog component (Modal exists but Dialog is more flexible)
- **ConfirmDialog** - Confirmation dialog with Yes/No buttons
- **Drawer** - Side panel/drawer component
- **Tabs** - Tabbed interface component
- **Accordion** - Collapsible sections component

### Data Display

- **DataGrid** - Advanced table with virtual scrolling, server-side sorting
- **Tree** - Tree view component
- **Timeline** - Timeline display component

### Feedback

- **Alert** - Alert/banner component
- **Progress** - Progress bar component
- **Skeleton** - Loading skeleton component

## Component Limitations

### Input

- **Uncontrolled**: No `value` prop, only `on_input` callback
- **No validation**: Parent must handle validation
- **Type limitation**: Only `input_type` prop (string), no type safety for HTML5 input types
- **No icon support**: No built-in prefix/suffix icon slots

### Table

- **Client-side sorting only**: No server-side sorting support
- **No column resizing**: Columns have fixed widths
- **No row selection**: No checkboxes or multi-select
- **No filtering**: No built-in column filters
- **No virtual scrolling**: Poor performance with 1000+ rows
- **No sticky headers**: Headers scroll with content

### Pagination

- **Fixed styling**: Limited customization of appearance
- **No page size selector**: Items per page is fixed by parent
- **No "show all" option**: Always paginates if total_pages > 1

### Modal

- **Single modal limitation**: Nested modals not tested, may have z-index issues
- **No animation customization**: Fade-in animation is fixed
- **No position control**: Always centered
- **No size variants**: Width/height controlled by content only

### FormField

- **Parent-controlled validation**: No internal validation logic
- **Static error messages**: Errors don't animate in/out independently
- **No async validation**: Parent must handle async validation

### Toast

- **Fixed duration**: Auto-dismiss at 3 seconds (not configurable)
- **Fixed position**: Always top-right corner
- **No stacking limit**: Unlimited toasts can stack (could overflow)
- **No action buttons**: Only dismiss on timeout or click

### Badge

- **No variant system**: Uses custom classes only (no Variant enum)
- **No size variants**: Fixed size
- **No icon support**: Text only

### Spinner

- **CSS animation only**: Uses keyframes, not requestAnimationFrame
- **No progress indication**: Indeterminate spinner only
- **Fixed colors**: Cyan/purple gradient (no variant customization)

### Card

- **No collapsible**: Always expanded
- **No header/footer slots**: Free-form content only
- **Limited glow colors**: Only 5 glow options (None, Cyan, Purple, Pink, Blue)

### Button

- **No icon support**: No built-in icon slots (left/right)
- **Loading state visual only**: Shows loading prop but parent handles disabled state
- **No tooltip**: No built-in tooltip on hover

### SpaLink

- **Basic external detection**: Only checks `http/https/mailto` prefixes
- **No active state**: No automatic "active" class for current route
- **No prefetch**: No link prefetching on hover

## Design Limitations

### Accessibility

- **Incomplete ARIA**: Only Modal has full ARIA attributes (role, aria-label, aria-modal)
- **No screen reader announcements**: Toast notifications not announced
- **Keyboard navigation**: Only Modal has Tab trap, other components lack full keyboard support
- **No reduced motion**: Animations don't respect `prefers-reduced-motion`

### Internationalization

- **No i18n support**: All strings are hardcoded
- **No RTL support**: Layout assumes LTR (left-to-right)
- **No locale-aware formatting**: Numbers, dates not formatted per locale

### Theming

- **Hardcoded colors**: Glassmorphism colors not customizable via CSS variables
- **No dark/light mode**: Theme assumes dark background
- **UnoCSS dependency**: Components rely on UnoCSS classes (not portable to pure CSS)

### Performance

- **Table re-renders**: Entire table re-renders on sort (no virtual DOM optimization)
- **Pagination slicing**: Creates new array on every page change
- **Portal leaks**: Portal cleanup uses UUID lookup (potential memory if many modals)

### Browser Support

- **Modern browsers only**: Uses ES2020+ features via wasm-bindgen
- **No IE11 support**: Relies on CSS Grid, Flexbox, backdrop-filter
- **Safari blur limitation**: `backdrop-blur` may have performance issues on older Safari

## Testing Gaps

- **No unit tests**: Components lack unit tests
- **No integration tests**: No tests for component interactions
- **No visual regression tests**: No screenshot comparison tests
- **Manual testing only**: All testing is manual in VAPORA frontend

## Documentation Gaps

- **No Storybook/demo site**: No interactive component showcase
- **Limited cookbook**: cookbook.md exists but examples are minimal
- **No API docs**: No generated rustdoc published online
- **No migration guide**: No guide for upgrading between versions

## Future Improvements

### High Priority

1. **Select component** - Most requested missing component
2. **Textarea component** - Common form control
3. **Table virtual scrolling** - Performance for large datasets
4. **Toast configurability** - Allow custom duration, position
5. **Accessibility audit** - Complete ARIA, keyboard navigation

### Medium Priority

1. **Checkbox/Radio components** - Complete form controls
2. **Dialog/ConfirmDialog** - More flexible than Modal
3. **Input controlled mode** - Add `value` prop for controlled components
4. **Table server-side sorting** - Support for large datasets
5. **Theme customization** - CSS variables for colors

### Low Priority

1. **Tabs component** - Nice-to-have layout component
2. **Drawer component** - Alternative to Modal
3. **Progress component** - Visual feedback for long operations
4. **i18n support** - Internationalization framework

## Known Bugs

### Confirmed Issues

- **Modal focus trap edge case**: If modal content has no focusable elements, Tab does nothing (should focus close button)
- **Pagination boundary**: If total_pages changes while on last page that no longer exists, UI shows invalid page number
- **Toast overlap**: With many rapid toasts, they can overlap vertically (no spacing)
- **Table sort stability**: Sorting equal values doesn't preserve original order

### Unconfirmed Issues

- **Safari backdrop-blur**: Reported performance issues on Safari 14, not verified
- **Portal cleanup timing**: UUID-based cleanup may not run if component unmounts during animation

## Contributing

If you encounter a limitation not listed here, please:

1. Check if it's a bug or a missing feature
2. Open an issue on GitHub (if repository exists)
3. Consider contributing a fix/implementation

See README.md for contribution guidelines.

---

**Last Updated**: 2026-02-08 (v1.2.0)
